在我们的 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;
例外是:
First chance exception at $00000000. Exception class $C0000005 with message 'access violation at 0x00000000: read of address 0x00000000'. Process Project1.exe (3996)
我写了一个重现问题的项目,它在 XE7 和 Delphi 10 Seattle 上都崩溃了,该项目托管在这里:
https://gist.github.com/fabioxgn/aaaddb5aa65db5d17202
该项目所做的很简单:
- 使用 OpenSSL 向https://google.com发起 GET 调用
- 启动 DataSnap 服务器
- 打开然后关闭与此 DataSnap 服务器的单个连接
几点:
- 如果不进行 https 调用,一切正常
- 这只发生在启用 RSA 过滤器的情况下,如果我删除过滤器它不会崩溃
关于是什么导致这次崩溃的任何线索?我尝试调试,但这段代码使用了很多 IPPeerFactory,我找不到运行的最终代码。
编辑
我打开了一份报告,他们确认这是一个错误:https ://quality.embarcadero.com/browse/RSP-12495