XE 10.2.3 ZLib库可能存在严重bug

日总是我哥 日总是我哥 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
数年没发帖了,上来特别提醒DELPHI用户注意这个问题。

在调用System.ZLib.ZDecompressStream时,某些情况可能陷入死循环,无法退出。


procedure ZDecompressStream(inStream, outStream: TStream);
const
bufferSize = 32768;
var
zstream: TZStreamRec;
zresult: Integer;
inBuffer: TBytes;
outBuffer: TBytes;
inSize: Integer;
outSize: Integer;
begin
SetLength(inBuffer, BufferSize);
SetLength(outBuffer, BufferSize);
FillChar(zstream, SizeOf(TZStreamRec), 0);

ZDecompressCheck(InflateInit(zstream));

try
inSize := inStream.Read(inBuffer, bufferSize);
while inSize > 0 do
begin
zstream.next_in := @inBuffer[0];
zstream.avail_in := inSize;

repeat
zstream.next_out := @outBuffer[0];
zstream.avail_out := bufferSize;

ZDecompressCheckWithoutBufferError(inflate(zstream, Z_NO_FLUSH));

outSize := bufferSize - zstream.avail_out;

outStream.Write(outBuffer, outSize);
until (zstream.avail_in = 0) and (zstream.avail_out > 0);

inSize := inStream.Read(inBuffer, bufferSize);
end;

repeat
zstream.next_out := @outBuffer[0];
zstream.avail_out := bufferSize;

zresult := ZDecompressCheckWithoutBufferError(inflate(zstream, Z_FINISH)); <--------------

outSize := bufferSize - zstream.avail_out;

outStream.Write(outBuffer, outSize);
until (zresult = Z_STREAM_END) and (zstream.avail_out > 0);
finally
ZDecompressCheck(inflateEnd(zstream));
end;
end;




function ZDecompressCheckWithoutBufferError(code: Integer): Integer; overload;
begin
Result := code;

if code < 0 then
if (code <> Z_BUF_ERROR) then <------------罪魁祸首
raise EZDecompressionError.Create(string(_z_errmsg[2 - code]));
end;



尚不清楚XE 10.2.3的ZLib代码为什么在code = Z_BUF_ERROR的时候,不抛出异常。

导致的后果是一直在repeat中死循环。
...全文

相关推荐

zlib 1.2.8 最近静态库 用XE5编译而成,目前最近版本

zlib 1.2.8 最近静态库 用XE5编译而成,目前最近版本。 包含zlib.h即可使用

鲨卷风芬哥

OpenSSH 9.6p1 源码编译升级实战:从安全漏洞到生产环境平滑迁移

在服务器安全运维中,守护进程的漏洞管理与版本升级是保障系统安全的核心环节。其原理在于通过更新软件组件修复已知安全缺陷,并引入更强大的加密算法与认证机制。这一过程的技术价值在于主动收缩攻击面,防范远程代码执行和权限提升等高风险漏洞,对于暴露在公网的服务至关重要。应用场景广泛覆盖各类Linux生产环境,包括CentOS、Ubuntu及国产化系统。本文聚焦于OpenSSH这一关键服务的升级实战,针对CVE-2023-38408等高危漏洞,详细解析从源码编译、依赖解决到配置迁移与回滚的完整流程,并提供了在国产化麒麟

weixin_33721344

OpenSSH 10.5安全升级指南:修复关键漏洞与应对新发布策略

SSH(Secure Shell)协议是保障远程登录、文件传输和网络服务通信安全的基石,其开源实现OpenSSH广泛应用于服务器管理、自动化运维和云原生环境。其核心原理在于通过非对称加密、密钥交换和数字签名,在客户端与服务器之间建立加密隧道,确保数据传输的机密性和完整性。这项技术的价值在于为系统管理员和开发者提供了安全可靠的远程操作能力,是现代IT基础设施不可或缺的组件。随着安全威胁的演变,及时更新OpenSSH以修复漏洞至关重要。本次更新修复了包括CVE-2024-6387(RegreSSHion)在内的

weixin_33965305

Ubuntu 14.04下Tweepy接入Twitter API的OAuth 1.0a实战解析

OAuth是一种开放授权协议,核心原理是通过签名验证、时间戳防重放和密钥协商实现第三方安全访问用户资源。其技术价值在于解耦认证与授权,支撑海量社交平台API调用;典型应用场景包括舆情监控、自动化运营和遗留系统集成。在老旧环境如Ubuntu 14.04中,因OpenSSL版本低、Python 2.7.6时间精度缺陷及TLS 1.2兼容性问题,OAuth 1.0a极易触发403/401错误。本文聚焦Tweepy 3.10这一适配v1.1 API的关键SDK版本,深入剖析base string构造、HMAC-SH

weixin_34050005

Delphi Zlib ex 1.2.8

Delphi Zlib ex 1.2.8 运行 D7-D17 xe xe2 X3

kernel001
评论 11
收藏 已收藏
分享
返回顶部
日总是我哥
Delphi 5,944 成员 262,941 内容