值得一看可能需要的修复或功能
重定向限制趋于一致,POSIX 子进程等待可及时返回
HTTP 客户端现在在 WinHTTP 与 libcurl 中一致应用 RedirectMax,同时收紧 WinHTTP 的降级重定向策略,并在受支持的 Windows 版本上启用 TLS 1.3。POSIX RunRedirect 在子进程关闭 stdout 后不再等待完整轮询时限。ARM 用户还应采用 DoubleToAscii 归一化的后续修正。
要点
- 使用 build 2.4.17538,以包含完整的重定向、TLS 与 DoubleToAscii 后续修复。
- TWinHttp 与 TCurlHttp 现在会真正执行 RedirectMax,而不再仅把它当作开关。
- POSIX RunRedirect 会在子进程退出时返回,不再等待配置的读取延迟。
- WinHTTP 在 Windows 11 和 Windows Server 2022 或更高版本上提供 TLS 1.3。
升级建议
升级到 build 2.4.17538。请复测 WinHTTP 与 libcurl 的重定向上限及 HTTPS 到 HTTP 的拒绝策略、POSIX 上使用 RunRedirect 的进程启动代码,以及 ARM 上的 Double 格式化。Windows 11 与 Server 2022 部署还可验证 TWinHttp 的 TLS 1.3 协商。
7 条中的 7 条 · 上游 9 次提交
1
高
ARM Double 格式化读取正确的归一化字
mormot.core.text 的 d2a_diy_fp_multiply 在 mul64x64 后改为检查 PQWordRec(@result.f)^.h,不再访问 PQWordArray 的第 1 个元素,从而直接定位 64 位结果的高 32 位字。
修复
mormot.core.text
415d148c+1-1
core: fixed DoubleToAscii() normalization after mul64x64()
影响
ARM Delphi/FPC 构建不会再用错误的字归一化 Grisu 状态,从而避免此前 ARM 优化引入的 DoubleToAscii 错误输出。
建议升级
升级 ARM 构建并重新运行浮点序列化测试,尤其覆盖 Grisu 归一化边界附近的值。
2
中
POSIX RunRedirect 在子进程关闭管道后立即返回
WaitReadPending 现在把 EINTR 视为暂无数据,并说明在 HUP、ERR 或 NVAL 且无可读字节时返回负值。RunRedirect 的 RedirectOutput 遇到该负值立即退出,POSIX 回归用例覆盖输出、shell 命令与退出码。
修复
mormot.core.os+1
f2b61cbc+43-2
core: RunRedirect() on POSIX returns again as soon as the child exits
影响
POSIX 后端启动短时命令后,不再在子进程退出后继续等待 waitfordelayms 到期。中断 poll 的信号会由外层循环重试,而不会被误判为管道关闭。
建议升级
使用较长 waitfordelayms 调用 RunRedirect 的 POSIX 服务应升级,并验证命令输出与退出码处理。
3
中
WinHTTP 执行重定向次数限制并阻止 HTTPS 降级
TWinHttp.InternalSendRequest 在 RedirectMax 为零时将 WINHTTP_OPTION_REDIRECT_POLICY 设为 NEVER,否则设为 DISALLOW_HTTPS_TO_HTTP;同时把 RedirectMax 传给 WINHTTP_OPTION_MAX_HTTP_AUTOMATIC_REDIRECTS,并在设置失败时抛出错误。
修复
mormot.net.client
e37c4af5+16-9
net: honor RedirectMax and check redirect policy in TWinHttp
影响
TWinHttp 不再超过配置的重定向次数,并会拒绝 HTTPS 到 HTTP 的降级。依赖此类降级或忽略选项失败的后端可能看到请求错误。
值得一看
复测存在重定向的 TWinHttp 调用,尤其是接近 RedirectMax 的链以及从 HTTPS 跳转到 HTTP 的端点。
4
中
libcurl 不再超过 RedirectMax 允许的重定向次数
TCurlHttp.InternalCreateRequest 仍根据 RedirectMax 切换 coFollowLocation,同时把 libcurl 的 coMaxRedirs 设置为所配置的正值。
修复
mormot.net.client
5297eabb+6-3
net: honor RedirectMax in TCurlHttp
影响
TCurlHttp 现在会在框架配置的上限停止重定向链,而不是采用 libcurl 默认上限,使不同 HTTP 客户端后端行为一致。
值得一看
若 RedirectMax 与 libcurl 默认上限不同,请复测包含大量重定向的 TCurlHttp 请求。
5
中
WinHTTP 在受支持的 Windows 版本上启用 TLS 1.3
WindowsSpecs 为 Windows 11 与 Windows Server 2022 或更高版本新增 wsTls13。存在该能力时,TWinHttp.InternalGetProtocols 会加入 WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_3,SChannel 也复用同一检测。
新功能
mormot.core.os+3
fe064e35+16-13
net: TWinHttp enable TLS 1.3 on Windows 11 or Server 2022
影响
受支持 Windows 系统上的 TWinHttp 连接可在无需修改应用的情况下协商 TLS 1.3;旧版 Windows 保持现有 TLS 协议集合。
值得一看
若生产环境限制传输协议版本,请在 Windows 11 或 Server 2022 上验证 TLS 协商与代理兼容性。
公开 API
TWindowsSpec.wsTls13added — 表示 Windows 11 与 Windows Server 2022 或更高版本具备官方 TLS 1.3 支持。
6
低
WinHTTP 重定向设置得到整理,并移除已合并的回归测试
TWinHttp.InternalSendRequest 将 aData 长度赋值移到 RedirectMax 选项调用后的独立语句。通过合并贡献加入的临时 RunRedirect 回归测试从 test.core.base 中移除。
内部重构
mormot.net.client
e84e07fc+5-37
net: some refactoring after previous commits
影响
公共 API 与预期运行行为不变。WinHTTP 代码更清晰,但短期存在的 POSIX 回归覆盖已从测试套件移除。
7
低
项目文档更新贡献者与编译器覆盖范围
CONTRIBUTORS.md 增加近期贡献者。README.md 将固定的最新 Delphi 版本改为持续跟进最新修订,加入 Delphi 13.2 验证,并说明 LLVM 编译器仍属初步支持。
文档
d17dfbfe+22-7
doc: refined main markdown files - especially the latest contributors! Thanks guys!
影响
应用与运行时行为不变。文档中的验证矩阵现包含 Delphi 13.2,并更准确描述 Delphi 跨平台支持状态。