立即处理可能影响正在运行的系统已审查 build 2.4.17162 至 2.4.17187 的全部 26 个 non-merge commit:除版本 bookkeeping 外新增 989 行、删除 286 行。raw payload 无 superseded_by;避开区间来自对同一 routine 后续修复的直接检查。未发现最终 head 的未解决缺陷。
URI redirect 稳定,heartbeat 与 session 计时恢复
URI 栈按 RFC 3986 重写并支持相对 Location 解析,随后在 HTTP client redirect 采用之前持续修正至 build 2.4.17187。生产用户还获得异步 WebSocket heartbeat 停止问题的后续修复、正确的 Signed URI 与 REST session timeout、更安全的 proxy-cache 启停,以及可选的 Windows IOCP 直接写入。外部 ESynSspi.RaiseLastOSError 调用需要迁移。
要点
- 采用 upstream head 215c7bbd240419735ad7e89f5d35ddc9cfeb8b4d,即 build 2.4.17187,以获得完整 URI 与 redirect 修复序列。
- Build 2.4.17171 恢复被上一版 idle-loop 比较禁用的异步 WebSocket heartbeat callback。
- Signed URI timestamp 顺序与 REST session timeout 算法已修正,覆盖长期运行服务及 32-bit tick rollover。
- Windows proxy cache 可使用 IOCP 直接写入,并避开启动与后台删除 race。
- 将外部 ESynSspi.RaiseLastOSError 调用替换为 ESynSspi.RaiseSspiError。
- Heartbeat 用户避开 2.4.17162–2.4.17170;URI 用户避开未完成的 2.4.17176–2.4.17186。
升级建议
升级到 head 215c7bbd240419735ad7e89f5d35ddc9cfeb8b4d 的 build 2.4.17187,不要停在 URI 重写中间版本。WebSocket、Signed URI、REST session、SOA discovery 与 proxy-cache 用户应优先升级。编译外部代码前将 ESynSspi.RaiseLastOSError 替换为 ESynSspi.RaiseSspiError,并回归测试相对 redirect、credential policy 与 Windows proxy 吞吐。
26 条中的 26 条 · 上游 26 次提交
1
高
Signed URI session 正确处理 tick rollover
TRestServerAuthenticationSignedUri.RetrieveSession 使用有符号模差比较 timestamp,仅在更新时记录,并统一启动与 32-bit rollover 处理。
安全
mormot.rest.server
1c193929+31-25
rest: fixed TRestServerAuthenticationSignedUri.RetrieveSession parsing
影响
长期运行的 Signed URI 服务不再在进程启动或 tick 回绕附近误拒绝或错序有效 authentication timestamp。
建议升级
Signed URI authentication 应优先采用,并在模拟 rollover 下测试 replay window。
2
高
HTTP redirect 通过 TUri 解析 Location
THttpClientSocket 用 TUri.FromLocation 替代手工 3xx Location 字符串处理,允许 OnRedirect 修改 Location/options,并基于解析 URI 决定重连、credential 与拒绝。
修复
mormot.net.client
150674b6+69-66
net: fixed THttpClientSocket 3xx redirection Location: parsing
影响
相对、绝对及 scheme-relative redirect 获得一致处理,但此初始集成需要后续 cross-origin 修复后才能用于生产。
建议升级
仅作为截至 2.4.17187 的完整序列采用,并测试 redirect callback。
公开 API
THttpClientSocket redirect Location handlingbehaviour-changed — 改用符合 RFC 3986 的 TUri.FromLocation。
3
高
初始 URI parser 缺陷已修正
TUri.From 与 FromLocation 修正直接字符串长度处理,拒绝空的显式 port,修复类型、边界检查及测试发现的相对解析输出。
修复
mormot.net.sock
50b2e69c+25-37
net: fixed TUri.From/FromLocation methods
影响
应用不应使用新 parser 的初始 build,因为畸形 port 与部分输入长度可能被错误处理。
建议升级
采用此 commit 及截至 2.4.17187 的全部后续 URI 修复。
4
高
TUri.FromScheme 现保持文本与枚举 scheme 一致
TUri.FromScheme 除 UriScheme 外还会从 TUriScheme lookup 设置 Scheme,并加入 HTTP、HTTPS、WS、WSS、FTP、LDAPS 回归测试。
修复
mormot.net.sock
215c7bbd+14-11
net: fixed TUri.FromScheme
影响
FromScheme 后使用 URI、SameUri 或 Https 的调用方现获得正确 scheme;停在 2.4.17186 可能构造不一致的 TUri。
建议升级
采用 2.4.17187,并测试随后读取 Scheme、URI 或 Https 的 FromScheme 调用。
公开 API
TUri.FromSchemebehaviour-changed — 现同时初始化 UriScheme 与 Scheme。
5
高
Redirect origin 检查与 retry 状态稳定
THttpClientSocket 在解析新 Location 后才计算 cross-origin,移除临时 RedirectCrossOrigin 字段,reopen 失败时恢复 HTTP 状态;FromScheme 记录 UriScheme。
修复
mormot.net.client+1
eb38a32d+10-7
net: one last set of fixes before the week-end
影响
Redirect credential policy 现基于实际目标判断,reconnect 失败不再留下半修改 client 状态。
建议升级
不要停在 2.4.17183;采用此稳定修复及最终 FromScheme 修复。
6
高
SOA discovery 正确遵守有效 publication timeout
TServicesPublishedInterfacesList 修正 expired/live 反向比较,使有效 published interface 保持可见,并允许有期限条目刷新 checksum 状态。
修复
mormot.soa.core
712db4b8+9-8
soa: fixed TServicesPublishedInterfacesList timeout logic
影响
使用非零 publication timeout 的服务发现不再隐藏有效服务或跳过必要刷新。
建议升级
使用到期 publication 的 SOA registry 应优先升级并验证 discovery renewal。
7
高
Proxy-cache 启动不再与 idle worker race
THttpProxyServer 新增 fUrlSet readiness flag,使 OnIdle 在 URL 初始化完成前退出,修复启动时记录的随机 GPF。
修复
mormot.net.async
7060c16c+8-3
net: fixed random GPF at THttpProxyServer startup
影响
生产 proxy cache 避免可能在 Start 完成前使进程 crash 的初始化 race。
建议升级
升级 proxy-cache 部署,并包含下一 commit 的 shutdown/delete guard。
8
高
Proxy-cache 删除在 shutdown 时安全中止
THttpProxyServer 在 Stop 或 remote-IP 变化时清除 fUrlSet,并在慢速目录删除期间检查它,避免后台工作继续访问失效状态。
修复
mormot.net.async
98ab0d20+6-3
net: hardened Proxy Cache background deletion even more
影响
Proxy-cache shutdown 与重新配置可避免后台访问过期 URL 状态,降低 crash/race 风险。
建议升级
与 startup guard 一并采用,并在大型 cache 删除时压测 Stop/SetRemoteIP。
9
高
异步 WebSocket heartbeat 恢复运行
TAsyncConnections.IdleEverySecond 改为将当前秒数与每个允许 callback 时间比较,不再错误比较 allowed 与 GC cutoff。
修复
mormot.net.async
505684ce+4-4
net: fixed regression in TWebSocketAsyncConnections heartbeats
影响
TWebSocketAsyncConnections heartbeat callback 不再于默认内存释放阈值后停止,恢复存活流量与 stale-peer 检测。
建议升级
异步 WebSocket server 应立即升级,验证后移除临时 LastOperationReleaseMemorySeconds=0 workaround。
10
高
TUri parsing 围绕有界 buffer 重写
TUri.From 重写并委托给新增 public FromBuffer,从有界 pointer 解析 scheme、user info、IPv6 authority、port、path、query 与 fragment。
内部重构
mormot.net.sock
4dd65061+152-92
net: rewritte TUri.From() method
影响
URI parsing 行为广泛变化并新增无分配入口;初始实现需配合后续修复。
建议升级
不要单独 cherry-pick;采用截至 2.4.17187 的完整序列。
公开 API
TUri.FromBufferadded — 解析有界 URI buffer,并支持可选默认 port。TUri.Frombehaviour-changed — 现使用新的有界 RFC-oriented parser。
11
中
SSPI exception 现报告实际 SSPI error
ESynSspi.RaiseLastOSError 重命名为 RaiseSspiError,并从传入 SSPI status 构建消息,不再附加无关 GetLastError;内部 Check 改为 CheckOK。
破坏性变更
mormot.lib.sspi+1
60ef8977+31-32
lib: fixed SSPI exception message
影响
Windows authentication/TLS 诊断更准确;调用该 public exception helper 的外部代码在重命名前无法编译。
需要迁移
搜索 ESynSspi.RaiseLastOSError,并替换为 ESynSspi.RaiseSspiError。
公开 API
ESynSspi.RaiseLastOSErrorrenamed — 重命名为 RaiseSspiError,并报告传入 SSPI status。
12
中
URI 校验遵循 RFC 3986 边界规则
TUri parsing 拒绝相对路径首 segment 中的冒号,收紧 authority、port 与 Location 校验,并扩充有效及畸形引用测试。
修复
mormot.net.sock
96f4f5cf+69-57
net: follow RFC 3986 for URI parsing
影响
畸形 redirect 目标不再被模糊解释;Delphi/FPC 仍支持有效 RFC 3986 相对引用。
建议升级
纳入完整 URI 序列,并测试服务接受的非标准 Location。
公开 API
TUri.From and TUri.FromLocationbehaviour-changed — 更严格拒绝畸形 RFC 3986 引用。
13
中
异步连接 GC 正确处理 tick rollover
TAsyncConnections.OneGC 使用无符号 elapsed-time 相减并限制未来 last-operation 值,使 idle cleanup 可跨 32-bit tick 回绕。
修复
mormot.net.async
b67f5df7+12-10
net: fixed TAsyncConnections GC timing logic
影响
长期运行的异步 Delphi/FPC server 不再在 timer rollover 附近错误延迟或触发连接 GC。
建议升级
升级长期运行的异步 server,并测试 idle connection cleanup。
14
中
HTTP proxy keep-alive 使用代理专用 header
THttpClientSocket 对 proxy 流量发送 Proxy-Connection: Keep-Alive,直接请求与关闭语义仍使用 Connection 处理。
修复
mormot.net.client
6c5201e6+8-6
net: try to fix THttpClientSocket over SQUID Proxy
影响
通过 SQUID 类 proxy 的连接因明确使用目标 hop-by-hop header 而更少被关闭或误处理。
建议升级
升级受影响 proxy client,并测试持久 HEAD/GET 请求。
15
中
每周 HTTP rotation 在正确时间触发
THttpRotater 修正 tick 比较,仅在当前 tick 达到 NextTix32 时执行每周 rotation,而非 deadline 尚未到达时。
修复
mormot.net.http
1fc47dc2+4-3
net: fixed regression in THttpRotater logic
影响
依赖每周 HTTP log/file rotation 的 backend 恢复预期调度,不再在错误时间轮换。
建议升级
升级使用 THttpRotater 的服务,并验证下一次计划 rotation。
16
中
TSynCache 仅在 deadline 后 reset
TSynCache.ResetIfNeeded 现要求 fTimeoutTix 非零,并在当前 tick 到达或超过 deadline 时 reset,替代反向的未来 deadline 检查。
修复
mormot.core.search
f975f6ac+4-3
core: fixed TSynCache.ResetIfNeeded logic
影响
Delphi/FPC cache 不再提前清空,并会在配置时间正确过期。
建议升级
升级使用定时 TSynCache 的代码,并重测命中保留与过期。
17
中
REST session 过期不再丢失 timeout 精度
TAuthSession 先将 SessionTimeout 乘以 MilliSecsPerMin 再位移,不再提前截断每分钟因子。
修复
mormot.rest.server
75a6ffd2+3-3
rest: fixed TAuthSession timeout computation
影响
长期运行的 Delphi/FPC server 不再略微提前使 idle session 过期;60 分钟设置此前最多损失约 36 秒。
建议升级
依赖精确 SessionTimeout 边界的 REST server 应升级并重测过期逻辑。
18
中
TUri 可无分配解析 HTTP Location
新增 public TUri.FromLocation,可根据 server、port 与 TLS context 解析绝对、scheme-relative、root-relative 和 path-relative Location。
新功能
mormot.net.sock
1d79356f+264-2
net: new TUri.FromLocation() method
影响
Delphi/FPC HTTP 代码可用单个无分配 parser 替代临时字符串操作,但应同时采用后续修复。
值得一看
仅在最终 build 2.4.17187 采用,并测试服务使用的相对 Location。
公开 API
TUri.FromLocationadded — 新增 public RFC 3986-aware Location resolver。
19
中
Redirect 可强制建立新 HTTP 连接
THttpRedirectOption 新增 hroForceReconnect,使 THttpClientSocket 对每次 redirect(含 same-origin)关闭并重开 socket。
新功能
mormot.net.client
49fa877c+10-6
net: new hroForceReconnect option for THttpClientSocket
影响
位于 SQUID/E2Guardian 后的 client 可避免陈旧或错误路由的复用连接;默认空 option set 保持现有行为。
值得一看
仅对受影响 proxy 路径启用 hroForceReconnect,并衡量连接成本。
公开 API
THttpRedirectOption.hroForceReconnectadded — 强制 redirect 时重建 socket。
20
中
异步 socket 可直接处理 IOCP 写入
TAsyncConnectionsOptions 新增 acoIocpWriteDirect;Windows 写路径可先直接调用 TPollAsyncSockets.ProcessWrite,再回退到 queue。
性能
mormot.net.async
7966b5fb+29-14
net: new hsoIocpWriteDirect HTTP server option for IOCP
影响
选择启用的 Windows async server 可降低 dispatch overhead;Delphi/FPC POSIX 路径不变。
值得一看
仅通过 server option 启用,并在 Windows 上压测并发大响应。
公开 API
TAsyncConnectionsOptions.acoIocpWriteDirectadded — 请求 Windows IOCP 直接写入处理。TPollAsyncSockets.ProcessWritesignature-changed — Windows 下新增带默认值的 direct-processing 参数。
21
中
Windows proxy cache 启用 IOCP 直接写入
新增 public hsoIocpWriteDirect server option,映射到 acoIocpWriteDirect;THttpProxyServer 在 Windows IOCP 上默认启用以减少排队写入切换。
性能
mormot.net.async+1
217c0a6b+15-11
net: enhanced Proxy Cache scaling on Windows
影响
Windows proxy-cache 吞吐可减少 write-queue 竞争;非 Windows backend 及未启用该选项的 server 保持原路径。
值得一看
对比 benchmark Windows proxy-cache 吞吐与延迟。
公开 API
THttpServerOption.hsoIocpWriteDirectadded — 启用 IOCP 直接写入处理。
22
低
测试适配 translation layer 与旧版 curl
RSA key generation 在 Windows PRISM 下放宽 timeout,symbol discovery 跳过 SynLogVectoredHandler,TFTP 集成测试对存在重传问题的 curl 版本加 gate。
编译器与平台
mormot.core.log+2
6250c714+47-36
test: try to adapt to some LUTI conditions
影响
CI 与模拟 Windows 环境减少误报;应用行为仅在 PRISM 下允许更长 RSA timeout。
23
低
URI 与 Location parsing 获得广泛回归覆盖
网络测试为 TUri.From 与 TUri.FromLocation 添加大量有效/无效案例,覆盖 authority、IPv6、port、query、fragment 与相对解析。
测试
a22a5e2e+268-3
test: cover TUri.From/FromLocation methods as much as possible
影响
应用代码无直接影响;这些测试约束 parser 重写并暴露后续 commit 修复的回归。
24
低
TUri.From 重写后扩充测试覆盖
网络测试在 parser 重写后新增 credential、IPv6 literal、显式 port、path、query、fragment 与畸形输入案例。
测试
d4c88e2e+33-2
tests: enhanced TUri.From() coverage
影响
应用代码无影响;扩充测试支撑后续 parser 修正。
25
低
FromScheme 获得针对性协议测试
网络协议测试在最终实现修复前覆盖 TUri.FromScheme 的 HTTP、HTTPS、WS、WSS、FTP、FTPS、LDAP 与 LDAPS。
测试
5ffe448e+24-2
tests: validate TUri.FromScheme method
影响
应用代码无影响;新增检查暴露了下一 commit 修复的 scheme-state 缺陷。
26
低
TFTP retry 预期得到细化
TFTP server 测试调整 retry 与 connection-count 预期,以匹配集成测试观察到的额外请求重传。
测试
4ba0e6f5+5-5
tests: refined TFTP server expectations
影响
应用代码无变化;仅测试预期在重传情况下更稳健。