gpt4 book ai didi

Delphi XE7/10 Seattle DataSnap OpenSSL 最终确定时访问冲突

转载 作者:行者123 更新时间:2023-12-02 05:13:06 25 4
gpt4 key购买 nike

在我们的 DataSnap TCP 服务器中添加对 https 网站的调用后,它在最终确定时开始崩溃。

崩溃发生在 Data.DBXOpenSSL.pas 上,更具体地说是在此方法上:

class procedure TRSACypher.ClearKey(var AKey: PRSAPeer);
begin
if AKey <> nil then
IPPeerProcs._RSA_free(AKey); // Crash here
AKey := nil;
end;

异常(exception)情况是:

第一次机会异常(exception),$00000000。异常类 $C0000005,带有消息“0x00000000 处的访问冲突:读取地址 0x00000000”。处理Project1.exe (3996)

我编写了一个项目,它重现了该问题,并且在 XE7 和 Delphi 10 西雅图上都崩溃了,该项目托管在此处:

https://gist.github.com/fabioxgn/aaaddb5aa65db5d17202

该项目的作用很简单:

  • 使用 OpenSSL 向 https://google.com 发起 GET 调用
  • 启动 DataSnap 服务器
  • 打开然后关闭与此 DataSnap 服务器的单个连接

几点:

  • 如果不进行 https 调用,一切正常
  • 这仅在启用 RSA 过滤器时发生,如果我删除过滤器,它不会崩溃

关于导致这次崩溃的原因有什么线索吗?我尝试调试,但此代码使用了很多 IPPeerFactory,并且我找不到运行的最终代码。

编辑

我已经打开了一份报告,他们确认它是一个错误:https://quality.embarcadero.com/browse/RSP-12495

最佳答案

从Embarcadero研发团队了解到,问题在于Indy是在Data.DBXOpenSSL之前完成的。当 Indy 最终确定时,它会将指向所有 OpenSSL 方法的函数指针清零。当 Data.DBXOpenSSL 完成时,它会执行尝试使用现在为零的函数指针的代码。

作为临时解决方法,可以通过将 Indy 抽象单元作为 use 子句中的第一个单元(IPPeerClient 在客户端,IPPeerServer 在服务器端)来避免错误并更改初始化和终止序列。一个项目。

关于Delphi XE7/10 Seattle DataSnap OpenSSL 最终确定时访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32894526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com