<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel>
  <title>mORMot2 Daily</title>
  <link>https://mormot2daily.fsb.dev</link>
  <description>Daily read of upstream commits</description>
  <language>en</language>
  <lastBuildDate>Tue, 13 Oct 2026 20:21:36 +0000</lastBuildDate>
  <item>
    <title>2026-10-13 — RSA 引入 FIPS 见证值，同时修复 AES-GCM 与数据库缺陷</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-10-13.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-10-13</guid>
    <pubDate>Tue, 13 Oct 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;本期主要是一组覆盖 RSA 正确性、合规性与性能的改动：固定宽度编码及更严格的 PKCS#1/PSS 校验先落地，随后采用 NIST DRBG 和 FIPS 186-5 Miller-Rabin 见证值选择。同时修复 AES-GCM 分块、x86 进位传播、ECC 密钥校验、定时器等待以及若干 PostgreSQL/SQLite 边界问题。直接使用公开 TBigInt API 的代码需要处理一次 IsPrime 签名变更，并可使用新增方法。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;应升级到 build 2.4.17586，以获得完整的 RSA 合规与优化系列。&lt;/li&gt;&lt;li&gt;TBigInt.IsPrime 现接受 TAesPrngAbstract 而非 PLecuyer；直接调用方必须迁移。&lt;/li&gt;&lt;li&gt;RSA 输出采用固定宽度，PKCS#1/PSS 校验会拒绝非规范或畸形编码。&lt;/li&gt;&lt;li&gt;AES-GCM 现可正确处理 AVX 部分块以及克隆或重置状态。&lt;/li&gt;&lt;li&gt;PostgreSQL 空字符串、BOOLINT 读取和线程安全连接销毁均已修复。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-10-12 — TTunnelLocal 改用带方向独立密钥的认证 AES-GCM</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-10-12.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-10-12</guid>
    <pubDate>Mon, 12 Oct 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;TTunnelLocal 完成安全协议重写：以带认证的 AES-GCM 帧替换 AES-CTR，分离收发密钥，将会话数据纳入认证，并更早拒绝畸形握手。本批提交还修复 OpenSSL GCM 关联数据处理、二进制 cookie 内存泄漏及带空格的 __Secure- cookie 解析，并针对 Delphi 2010 禁用不安全内联。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;使用 build 2.4.17551；TTunnelLocal 安全重写随后立即获得三次加固。&lt;/li&gt;&lt;li&gt;加密 TTunnelLocal 流量现使用 AES-GCM、认证帧及独立的收发密钥。&lt;/li&gt;&lt;li&gt;引用 tlmVersion1 的代码必须迁移到 tlmVersion1_aesctr 或新的 tlmVersion2。&lt;/li&gt;&lt;li&gt;TAesGcmOsl 现在能正确认证 AEAD 关联数据。&lt;/li&gt;&lt;li&gt;TBinaryCookieGenerator 在失效后销毁时不再泄漏托管状态。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-10-11 — 重定向限制趋于一致，POSIX 子进程等待可及时返回</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-10-11.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-10-11</guid>
    <pubDate>Sun, 11 Oct 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;HTTP 客户端现在在 WinHTTP 与 libcurl 中一致应用 RedirectMax，同时收紧 WinHTTP 的降级重定向策略，并在受支持的 Windows 版本上启用 TLS 1.3。POSIX RunRedirect 在子进程关闭 stdout 后不再等待完整轮询时限。ARM 用户还应采用 DoubleToAscii 归一化的后续修正。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;使用 build 2.4.17538，以包含完整的重定向、TLS 与 DoubleToAscii 后续修复。&lt;/li&gt;&lt;li&gt;TWinHttp 与 TCurlHttp 现在会真正执行 RedirectMax，而不再仅把它当作开关。&lt;/li&gt;&lt;li&gt;POSIX RunRedirect 会在子进程退出时返回，不再等待配置的读取延迟。&lt;/li&gt;&lt;li&gt;WinHTTP 在 Windows 11 和 Windows Server 2022 或更高版本上提供 TLS 1.3。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-10-10 — HTTP 客户端与 WebSocket 在大规模 ECC 优化后趋于稳定</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-10-10.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-10-10</guid>
    <pubDate>Sat, 10 Oct 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;本期修复了多处 HTTP.sys WebSocket 生命周期问题，并纠正 WinINet、WinHTTP、Delphi HTTP 客户端与 libcurl 的响应头处理。同一批提交重写了 ARM、i386 与 x86-64 上的多条 ECC P-256 算术路径，同时恢复 Delphi 7/2007 和 Delphi POSIX 编译。POSIX Kerberos 用户还需处理两个公开 keytab 签名变化。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;应使用 build 2.4.17531：它包含完整的 HTTP 客户端响应头修复系列及全部兼容性后续修复。&lt;/li&gt;&lt;li&gt;build 2.4.17513 至 2.4.17515 在 mormot.core.base 中含有孤立的 fixme token，不应使用。&lt;/li&gt;&lt;li&gt;TServerSspiKeyTab.PrepareKeyTab 现在返回 boolean，ServerForceKeytab 的参数由 TFileName 改为 RawUtf8。&lt;/li&gt;&lt;li&gt;HTTP.sys WebSocket 的清理、idle callback、ping 跟踪与发送失败处理在七个提交中被连续修订。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-10-09 — FPC ARM 原子操作恢复内存顺序，HTTP.sys WebSocket 完成重构</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-10-09.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-10-09</guid>
    <pubDate>Fri, 09 Oct 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;本期修复了 FPC ARM 与 AArch64 上 mORMot 锁缺失内存屏障的问题；此前即使锁字互斥，受保护数据仍可能发生竞态。Windows 的 HTTP.sys 请求与 WebSocket 处理被大幅重构，并连续修复连接生命周期、overlapped I/O、发送、关闭与 ping 路径。直接使用低层 HTTP.sys wrapper 或 THttpApiWebSocketServerProtocol 连接索引的代码需要迁移。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;FPC ARM 与 AArch64 锁操作现在提供完整内存屏障；旧实现可能丢失更新或破坏共享状态。&lt;/li&gt;&lt;li&gt;HTTP.sys 请求引擎现在正确处理无限制的 chunked body，会断开留下未读 body 的失败连接，并隔离每个请求的状态。&lt;/li&gt;&lt;li&gt;HTTP.sys WebSocket 连接管理改用 TLockedList ID、独立的接收/唤醒 overlapped 记录和受保护的关闭流程。&lt;/li&gt;&lt;li&gt;THttpServerRequest.FullUrl 现为 RawUtf8，HttpApiRequest 已移除，多项低层 HTTP.sys 签名也已改变。&lt;/li&gt;&lt;li&gt;optCleanMagicJson 可从 SOA 响应移除 JSON_BASE64_MAGIC；新增 SetErrorText、HtmlEscapeShortVar 与 TLockedList.Find。&lt;/li&gt;&lt;li&gt;请落到 build 2.4.17497，不要停留在 HTTP.sys 过渡版本 2.4.17464–2.4.17496。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-10-08 — 代理路由趋于稳定，WebSocket 子类陷阱得到修复</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-10-08.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-10-08</guid>
    <pubDate>Thu, 08 Oct 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;本期扩展了 socket 与 REST 客户端的代理发现和绕过处理，并修复了重定向路由、代理凭据、socket 层及 URI 校验。还新增了支持 options 的 WebSocket factory，最终 build 修复了旧 overload 返回错误派生类型的回归。直接调用 GetProxyForUri 的代码现在必须传入 TUri，而不是 RawUtf8。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;GetProxyForUri 现在接收 TUri 而非 RawUtf8，直接调用处需要源码迁移。&lt;/li&gt;&lt;li&gt;HTTP_PROXY、HTTPS_PROXY、NO_PROXY、Windows bypass list 与 REST ProxyName 现在都会参与 socket 客户端路由选择。&lt;/li&gt;&lt;li&gt;跨源重定向、代理凭据变化和非 TCP 重连现在会选择正确的路由与 socket 层。&lt;/li&gt;&lt;li&gt;新的 THttpClientWebSockets.WebSocketsConnect overload 支持 TUri 与 THttpRequestExtendedOptions；build 2.4.17462 修复了旧 overload 的派生类 dispatch。&lt;/li&gt;&lt;li&gt;RemoveMagicFromJson 会移除 JSON 字符串前缀中的 JSON_BASE64_MAGIC，而不改动普通字符串。&lt;/li&gt;&lt;li&gt;请落到 build 2.4.17462，不要停留在 2.4.17450 至 2.4.17461。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-10-07 — HTTP 状态机趋于稳定，Unix 客户端关闭不再删除服务端 socket</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-10-07.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-10-07</guid>
    <pubDate>Wed, 07 Oct 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;本期集中于网络：完成大规模 HTTP 客户端与超时重构，并修复其间暴露的构造器、代理、WebSocket 和原生后端回归。HTTP 请求 framing 现在区分 HEAD 响应语义与请求体；Windows HTTP.sys 支持 chunked 上传及重复认证或 cookie header；POSIX 客户端关闭时也不再删除 Unix-domain 服务端 socket。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;POSIX Unix-domain clients no longer unlink the server socket path when they close.&lt;/li&gt;&lt;li&gt;HTTP.sys now accepts chunked request bodies and preserves repeated Set-Cookie and authentication headers.&lt;/li&gt;&lt;li&gt;HEAD and OPTIONS handling now follows message framing; redirected 301 POST and 303 requests also discard their old bodies.&lt;/li&gt;&lt;li&gt;THttpRequestExtendedOptions.GetTimeouts is replaced by ComputeTimeouts, THttpRequest.InternalConnect loses its parameters, and TCrtSocket.ReOpen no longer accepts a timeout.&lt;/li&gt;&lt;li&gt;TRestHttpClientGeneric connection-definition parsing no longer risks an infinite loop.&lt;/li&gt;&lt;li&gt;Land on final build 2.4.17433 rather than an intermediate build from this refactor sequence.&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-10-06 — 异步关闭修复泄漏，HTTP 超时按阶段拆分</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-10-06.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-10-06</guid>
    <pubDate>Tue, 06 Oct 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;这是一期影响较大的网络更新。异步服务器、隧道与 RTSP-over-HTTP 协同修复了所有权和关闭流程，TSynThreadPool 也消除了可能让排队任务一直休眠的竞争。HTTP 客户端新增独立的连接、发送和接收超时，Kerberos 服务端认证则统一到跨平台 wrapper，并移除一个公开方法。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;TSynThreadPool now clears a worker&amp;#x27;s processing state under the pending-queue lock, preventing a queued task from being stranded by a wake-up race.&lt;/li&gt;&lt;li&gt;Async socket, tunnel and RTSP-over-HTTP cleanup now closes file descriptors and transferred connections on failure and shutdown paths.&lt;/li&gt;&lt;li&gt;TCrtSocket and HTTP clients now expose separate connect, send and receive timeouts; use 0, not a negative value, when requesting legacy fallback on a live TCrtSocket.&lt;/li&gt;&lt;li&gt;TServerSspiKeyTab.ComputeServerHeader is removed; migrate direct callers to KerberosServerAuthHeader and prepare a POSIX keytab explicitly when required.&lt;/li&gt;&lt;li&gt;Delphi users should land on build 2.4.17398, which repairs compilation after the timeout constructor refactor.&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-10-05 — RTSP-over-HTTP 测试不再共享监听端口</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-10-05.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-10-05</guid>
    <pubDate>Mon, 05 Oct 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;这是一期仅涉及测试的平静更新。两个 RTSP-over-HTTP 回归测试变体现在分别使用不同的 RTSP 与 HTTP 端口组合，生产单元和公开 API 均未改变。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;RTSPOverHTTP 使用端口 3997/3996，RTSPOverHTTPBufferedWrite 继续使用 3999/3998。&lt;/li&gt;&lt;li&gt;修改仅限于 test.net.proto，无需更改 Delphi 或 FPC 应用。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-10-04 — PostgreSQL 数组绑定与并发等待得到修复</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-10-04.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-10-04</guid>
    <pubDate>Sun, 04 Oct 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;PostgreSQL batch 不再序列化数组的未使用容量，也不会丢失末尾 quote，从而同时修复显式失败与静默值变化。TPipeStream 现在会在达到声明大小时返回 EOF，最终的 POSIX poll 路径则能在 signal 与临时资源耗尽时保持正确 timeout。thread pool 计数改为原子操作，其余提交构建共享 task pool helper 并扩展并发测试。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;应采用 build 2.4.17369 的 913a072a26c0305bc468a79b658137de5f7d124b。&lt;/li&gt;&lt;li&gt;PostgreSQL bound array 现在遵循 ValuesCount，并保留以一个或多个 quote 结尾的值。&lt;/li&gt;&lt;li&gt;当最后一个 block 恰好结束于声明的 stream 大小时，TPipeStream.Read 不再无限等待。&lt;/li&gt;&lt;li&gt;POSIX poll retry 现在保持实际 timeout，并一致处理 EINTR、EAGAIN 与 POLLNVAL。&lt;/li&gt;&lt;li&gt;TSynThreadPool 的 pending task 计数改为原子操作，也覆盖 IOCP 入队失败与 waiter wake-up。&lt;/li&gt;&lt;li&gt;新的 TSynThreadTasks 与 TSynTestCase helper 简化了持久共享 test worker 的使用。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-10-03 — AES-GCM 认证恢复，Tunnel 与队列生命周期重构</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-10-03.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-10-03</guid>
    <pubDate>Sat, 03 Oct 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;最紧急的修复为 AES-GCM 解密的 AVX 路径恢复 GMAC 校验；在符合条件的 x86-64 系统上，该路径此前可能接受伪造的 ciphertext、tag 或 associated data。Tunnel 的生命周期、handshake 与关闭流程被重构，使外部调用离开锁区，并由 owner 确定性管理 thread。队列和 thread pool 的等待路径加入 OS futex 与新 API，随后补齐 Delphi、Win8+ 和 Linux 所需修复。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;应采用 build 2.4.17356 的 1f7febd219f9cb54175a1f87620e6862e4e670b8。&lt;/li&gt;&lt;li&gt;TAesGcmEngine.Decrypt 现在会在 AVX single-pass 路径后校验 GMAC；测试会拒绝伪造的 ciphertext、tag 与 AAD。&lt;/li&gt;&lt;li&gt;TTunnelLocal 现在拥有并 join worker，显式转移 socket，并在 state lock 外执行 relay callback。&lt;/li&gt;&lt;li&gt;TSynQueue 在可用时采用 OS futex，并新增 WaitPopReset 与 Waiters；带比较条件的等待仍使用 polling。&lt;/li&gt;&lt;li&gt;TSynThreadTasks、PendingTasks 与 WaitFor 增加托管任务执行和完成等待；最终修复覆盖 Delphi、Win8+ 与 Linux。&lt;/li&gt;&lt;li&gt;内存 ZIP data descriptor、REST WebSocket callback 清理和 THttpApiServer 启动均获得生产修复。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-10-02 — WebSocket 死锁得到修复，TLS 与异常日志趋于稳定</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-10-02.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-10-02</guid>
    <pubDate>Fri, 02 Oct 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;Async WebSocket 广播与 RTSP 转发不再持有连接 read lock 进行发送，从而修复写入失败并移除 peer 时的死锁。SChannel 现在把发送期间的正常关闭视为 closed connection，并补全 TLS 1.3 renegotiation 覆盖。异常拦截也修复了并发线程、Delphi Win32 与 Delphi POSIX 路径；AVX-512 检测则会确认 OS 确实保存 ZMM 状态。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;应采用 build 2.4.17324 的 05e40cd692d391efb62ed97f78f264867477e8e5。&lt;/li&gt;&lt;li&gt;TWebSocketAsyncServer.WebSocketBroadcast 与 TPostConnection.OnRead 在失败 send 删除连接时不再死锁。&lt;/li&gt;&lt;li&gt;SChannel 在正常关闭时返回 nrClosed，接收路径也会处理 TLS 1.3 的 SEC_I_RENEGOTIATE。&lt;/li&gt;&lt;li&gt;并发异常不再丢失，Delphi Win32 重复记录被抑制，Delphi POSIX 新增异常拦截。&lt;/li&gt;&lt;li&gt;IntelAvx512 现在是启动时计算并经 XCR0 过滤的变量；cpuAVX512 标识 OS 已启用的 x86-64-v4 支持。&lt;/li&gt;&lt;li&gt;issue #418 的 Windows http.sys WebSocket 回归测试因在 Windows 11 上仍不可靠而被禁用。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-10-01 — SChannel 获得原生 mTLS，服务器启动竞态得到修复</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-10-01.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-10-01</guid>
    <pubDate>Thu, 01 Oct 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;Windows 服务器现在可通过 SChannel 要求并验证客户端证书，并复用 TNetTlsContext 现有的信任存储与验证回调。另一组修改修复 HTTP 和 async 服务器构造顺序，避免主线程在 socket、worker 与交叉引用就绪前运行。使用 Windows mTLS 或在高负载下创建服务器的团队应直接采用最终 build。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;应采用 build 2.4.17294 的 de8d47ea7122b30aa81296a1e5e899a3909e34b1。&lt;/li&gt;&lt;li&gt;SChannel 服务器现通过 ClientCertificateAuthentication、CACertificatesFile、CASystemStores、CACertificatesRaw、OnEachPeerVerify 与 OnAfterPeerValidate 实现 mTLS。&lt;/li&gt;&lt;li&gt;HTTP 与 async 服务器线程会保持 suspended，直到 socket、worker 与 owner link 完成初始化。&lt;/li&gt;&lt;li&gt;应升级以获得 CACertificatesRaw 加载修复、缺少客户端证书的明确错误及最终 SChannel 声明与 cache 修正。&lt;/li&gt;&lt;li&gt;新增公开 API 包括 acoCreateSuspended、ConsoleLock/ConsoleUnLock 与 WinCryptTextToBinary。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-09-30 — Windows CNG 与 PKCS#11 扩展，同时修复 JSON 和 socket 安全缺陷</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-09-30.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-09-30</guid>
    <pubDate>Wed, 30 Sep 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;本期以密码学为主：新增 Windows CNG 证书存储后端，完成通过 CNG 与 PKCS#11 私钥解密 RSA envelope，并修复一系列 PKCS#11 导入、签名和生命周期问题。此外还修复 JSON 日志越界读取、限制 socket 重试循环、修正反向代理后的会话 cookie 选择，并拆分 HTTP connect/send/receive timeout。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;应采用 build 2.4.17268 的 80bc2689df777dadbe1f8af745096eeb13205ef7。&lt;/li&gt;&lt;li&gt;若代码引用 TAesAbstractApi 或其 CryptoAPI AES 子类，请在 uses 中加入 mormot.crypt.win；这些类型已从 mormot.crypt.core 移出。&lt;/li&gt;&lt;li&gt;Windows 新增 TCryptCertAlgoCng、ICryptCertCng 与 TCryptCertCng.LoadPkcs12，支持系统 store、smart card/KSP 和临时 PFX identity。&lt;/li&gt;&lt;li&gt;PKCS#11 新增 RSA envelope 解密与更多签名支持，但 TPkcs11 明确不再 thread-safe；共享 catalog 必须使用 TCryptCertAlgoPkcs11.Lock/UnLock。&lt;/li&gt;&lt;li&gt;应尽快升级以修复 TJsonWriter.AddEscapeBuffer 越界读取、TCrtSocket.TrySockRecv 无限重试、CNG/PKCS#11 GPF 及 OpenSSL ABI 问题。&lt;/li&gt;&lt;li&gt;THttpClientSocket.SetTimeouts 现在分别设置 connect、send 与 receive 时限；TRestHttpClientSocket 会应用三者。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-09-29 — SChannel 默认启用 TLS 1.3，Windows CNG 支持完成整合</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-09-29.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-09-29</guid>
    <pubDate>Tue, 29 Sep 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;这一以 Windows 为主的系列更改了 SChannel 默认协议策略，在已接受的 HTTPS 连接间共享服务器 credentials，并新增大量 CNG、certificate store 与 msLAPS 支持。最终提交还修复 Delphi 7/13 编译问题、避开 Wine 的 CNG stub，并纠正证书私钥 ownership。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;应采用 build 2.4.17208 的 18e7d88c0083b279402c59019c030abdfe39e3e1。&lt;/li&gt;&lt;li&gt;SChannelEnableTls13 在 Windows 11 与 Windows Server 2022 及以上版本默认变为 true；若不准备启用，应在初始化前设为 false。&lt;/li&gt;&lt;li&gt;使用 SChannel 的 HTTPS 服务器现在只获取一份共享 server credential，并保持到最后一个已接受 TLS context 释放。&lt;/li&gt;&lt;li&gt;TNetTlsContext 可向 SChannel 提供 PCCERT_CONTEXT 或受密码保护的 PFX，ReleaseBuffers 也可释放空闲 SChannel buffer。&lt;/li&gt;&lt;li&gt;新的 TNCrypt、TWinCertStore 与 TWinCertCngKey wrapper 提供 CNG key、certificate store、签名、secret unprotection 与 msLAPS 解密。&lt;/li&gt;&lt;li&gt;Wine 会跳过其 CNG stub 层，Delphi 7 与 Delphi 13 则得到明确的编译修复。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-09-28 — 脚本引擎过期时间保留完整分钟范围</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-09-28.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-09-28</guid>
    <pubDate>Mon, 28 Sep 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;一行算术修复避免较大的 TThreadSafeManager.EngineExpireTimeOutMinutes 在换算为毫秒时溢出。Windows SChannel server 在证书 store 中无法选出证书时，exception 现在也会包含底层系统错误。配置了超长生命周期的脚本引擎 pool 应采用第一项修复；TLS 变更仅改进诊断。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;采用 upstream head 5a1509b805bcdc7f239c683bd0e68ab9700c1247，即 build 2.4.17189。&lt;/li&gt;&lt;li&gt;EngineExpireTimeOutMinutes 现在用 Int64 完成分钟到毫秒的乘法，避免较大设置发生 32-bit 溢出。&lt;/li&gt;&lt;li&gt;SChannel 证书查找失败时，ESChannel 现在包含 Windows 错误文本与代码，不再只有通用消息。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-09-26 — URI redirect 稳定，heartbeat 与 session 计时恢复</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-09-26.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-09-26</guid>
    <pubDate>Sat, 26 Sep 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;URI 栈按 RFC 3986 重写并支持相对 Location 解析，随后在 HTTP client redirect 采用之前持续修正至 build 2.4.17187。生产用户还获得异步 WebSocket heartbeat 停止问题的后续修复、正确的 Signed URI 与 REST session timeout、更安全的 proxy-cache 启停，以及可选的 Windows IOCP 直接写入。外部 ESynSspi.RaiseLastOSError 调用需要迁移。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;采用 upstream head 215c7bbd240419735ad7e89f5d35ddc9cfeb8b4d，即 build 2.4.17187，以获得完整 URI 与 redirect 修复序列。&lt;/li&gt;&lt;li&gt;Build 2.4.17171 恢复被上一版 idle-loop 比较禁用的异步 WebSocket heartbeat callback。&lt;/li&gt;&lt;li&gt;Signed URI timestamp 顺序与 REST session timeout 算法已修正，覆盖长期运行服务及 32-bit tick rollover。&lt;/li&gt;&lt;li&gt;Windows proxy cache 可使用 IOCP 直接写入，并避开启动与后台删除 race。&lt;/li&gt;&lt;li&gt;将外部 ESynSspi.RaiseLastOSError 调用替换为 ESynSspi.RaiseSspiError。&lt;/li&gt;&lt;li&gt;Heartbeat 用户避开 2.4.17162–2.4.17170；URI 用户避开未完成的 2.4.17176–2.4.17186。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-09-25 — SChannel 与 HTTP cache 稳定，但 heartbeat 出现回归</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-09-25.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-09-25</guid>
    <pubDate>Fri, 25 Sep 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;Windows SChannel 修复了并发、handshake、重协商与内存使用；HTTP client 新增可选 redirect 限制，两个 proxy cache 也修正状态处理。异步 WebSocket heartbeat 改由 HeartbeatDelay 驱动，但两次后续修改使最终 idle-loop 比较在达到默认内存释放阈值后禁用 callback。自定义 INetTls 实现及使用已移除 LastOperationIdleSeconds 属性的代码也需要迁移。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;采用 upstream head c94dba6c18f6a0c5b225734af210da678cc59167，即 build 2.4.17161，以获得完整 SChannel、redirect 与 cache 修复。&lt;/li&gt;&lt;li&gt;异步 WebSocket heartbeat callback 会在默认 idle-memory 阈值后被禁用；比较条件修复前请将 LastOperationReleaseMemorySeconds 设为 0。&lt;/li&gt;&lt;li&gt;自定义 INetTls 实现必须添加 ReleaseBuffers，使用 LastOperationIdleSeconds 的代码须迁移到 GetLastOperationIdleSeconds。&lt;/li&gt;&lt;li&gt;THttpRequestExtendedOptions.RedirectOptions 新增可选 cross-origin credential 清理与 redirect 拒绝，默认仍不受限制。&lt;/li&gt;&lt;li&gt;Proxy cache 现在拒绝无效 GET 状态，失败时中止 progressive reader，并校验最终文件大小。&lt;/li&gt;&lt;li&gt;避开 build 2.4.17143 以及未完成的 redirect build 2.4.17159–2.4.17160。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-09-24 — TLS 后端在全栈修复后趋于稳定</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-09-24.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-09-24</guid>
    <pubDate>Thu, 24 Sep 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;OpenSSL 与 Windows SChannel 的 callback、证书 policy、异步 I/O、shutdown 及错误报告得到全面修复。外部 ORM 插入在 SELECT max(ID) 失败时安全停止，不再从一重新尝试 ID；SQLite 后备 allocator 也恢复 Android ARM64 所需对齐。这批变更直接影响生产：应采用最终 head，不要停在中间 TLS build。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;采用 upstream head 34c5672df4ab31378524d2868b8482b408eafbdd，即 build 2.4.17135。&lt;/li&gt;&lt;li&gt;外部 ORM max-ID 失败时返回 0 并取消插入，不再从一开始尝试重复 ID。&lt;/li&gt;&lt;li&gt;OpenSSL 的 callback、mTLS 信任、异步重试、密码 callback、SNI 与 shutdown 获得关联修复。&lt;/li&gt;&lt;li&gt;SChannel 为缓冲异步 I/O 重写，随后修复 handshake、TLS 1.3、shutdown、ClientHello 与最终错误处理。&lt;/li&gt;&lt;li&gt;SQLite 后备 allocator 改用 16 字节 header，确保 Android ARM64 原子访问对齐。&lt;/li&gt;&lt;li&gt;避开 2.4.17117，以及 OpenSSL 2.4.17083–2.4.17113 与 SChannel 2.4.17119–2.4.17134。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-09-23 — 异常历史记录重构，OpenSSL 再获 I/O 修复</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-09-23.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-09-23</guid>
    <pubDate>Wed, 23 Sep 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;上游确认旧的最近异常存储存在随机 GPF 与不安全的内存/threading 模型后，异常拦截路径被大幅重构。最终实现修正了 newest-first 读取，并为每个异常保存有界 stack。OpenSSL Send/Receive 重试与 setup 错误报告得到两个最终修复，FPC 同时改进 stack 捕获并修复 ARM32 确定性 seed。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;应采用 build 2.4.17082 的 03ab5c85c4b2982c96b7f38d683dbff85e016f77。&lt;/li&gt;&lt;li&gt;GetLastException 与 GetLastExceptions 现在使用带锁的 16-entry ring，并为每个异常保存独立 stack 副本。&lt;/li&gt;&lt;li&gt;OpenSSL 仅重试 WANT_READ/WANT_WRITE，设置五秒上限，并在 setup 失败时不再误用 SSL_get_error。&lt;/li&gt;&lt;li&gt;公开 class method TDebugFile.AddLog 已移除；外部调用方必须迁移到保留的 location 或 StackTrace API。&lt;/li&gt;&lt;li&gt;KEEP_STACKFRAMES 可保留项目 stack-frame 设置，主要用于 FPC POSIX 调试，但有明确的性能成本。&lt;/li&gt;&lt;li&gt;FPC Windows 使用 RTL 捕获的异常 stack，FPC ARM32 则为 TLecuyer.SeedGenerator 提供稳定的 QWord 存储。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-09-22 — TLS 验证、格式化安全与 Delphi 移动网络支持同时落地</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-09-22.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-09-22</guid>
    <pubDate>Tue, 22 Sep 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;OpenSSL 用户应完整采用本次 transport 序列：跨方向 socket 重试、默认 hostname 验证，以及 OpenSSL 1.x/3.x 的错误队列清理。FormatAdder 曾在一个 build 中于空输出时可能通过无效目标写入。Delphi Android/iOS 新增 System.Net HTTP backend，Delphi ARMv7 可用，TXmlParser 也开始接受简单 DOCTYPE，但不会加载 DTD entity。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;应采用 build 2.4.17065 的 743a53fd4cb3af700463b0d143581ce17c6c8b31。&lt;/li&gt;&lt;li&gt;HostNamesCsv 为空时，OpenSSL client 现在验证 ServerAddress；OpenSSL 1.x/3.x 在 connect、accept、read、write 前清理旧错误。&lt;/li&gt;&lt;li&gt;避开 2.4.17025–2.4.17063 的不完整 OpenSSL 重试序列，以及存在 FormatAdder 空输出 overflow 路径的 2.4.17047。&lt;/li&gt;&lt;li&gt;Delphi Android/iOS 可通过 OS TLS 使用 TDelphiNetHttp、TRestHttpClientDelphiNet 与 TSqlDBDelphiNetConnectionProperties。&lt;/li&gt;&lt;li&gt;Delphi Android ARMv7 新增 ABI stub、packed field 对齐 JSON 处理和 variadic-call 支持。&lt;/li&gt;&lt;li&gt;TXmlParser 默认忽略简单外部 DOCTYPE；如需严格拒绝请使用 xpoRejectDocType，internal subset 仍不支持。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-09-21 — 异步 OpenSSL handshake 正确重试，TSynLog 同时缩短写锁</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-09-21.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-09-21</guid>
    <pubDate>Mon, 21 Sep 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;使用 OpenSSL 的非阻塞 client/server 现在会在 WANT_READ 或 WANT_WRITE 后重试 SSL_connect 与 SSL_accept，而不再视为致命错误。最终 commit 保留首次 SSL_get_error 结果，使真实 handshake 失败报告正确原因。TSynLog 还把 stack trace 与 system information 收集移出 writer lock，以更大的每线程状态和有界 suffix 换取更低争用。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;应采用 build 2.4.17024 的 13c7b4dd94b23c25d51e5b0ab9b6e207cb039207。&lt;/li&gt;&lt;li&gt;异步 socket 上的 OpenSSL TLS handshake 现在会重试 WANT_READ/WANT_WRITE，最长五秒。&lt;/li&gt;&lt;li&gt;避开 build 2.4.17020–2.4.17023：新重试循环在报告终止错误时再次调用 SSL_get_error；2.4.17024 改为传入已捕获错误码。&lt;/li&gt;&lt;li&gt;TSynLog 在获取每个 writer 的锁前预渲染配置的 stack trace 与 system information。&lt;/li&gt;&lt;li&gt;TSynLog thread record 增加 320 bytes；stack-trace suffix 上限为 255 bytes，system-information suffix 为 63 bytes。&lt;/li&gt;&lt;li&gt;AppendSysInfo 是新的公开 helper，可在不清空现有 ShortString 的情况下追加系统信息。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-09-20 — 日志检查保留 MAB 文件，并新增跨平台调用方追踪</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-09-20.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-09-20</guid>
    <pubDate>Sun, 20 Sep 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;本期主要加固 TSynLog 周边工具，不改变 backend 协议。日志读取器不再因空 profiler 数据或纯文本选择而崩溃，TDebugFile 也不再删除无法读取的外部 .mab 文件。FreeBSD、FPC 与 Android 获得 socket/POSIX 兼容修复，调用方符号发现现在可通过 TDebugFile 覆盖所有受支持编译器。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;应采用 build 2.4.17019 的 fc996116ae8a2534c5e763ac180649cdb78013ab。&lt;/li&gt;&lt;li&gt;TDebugFile.Create 不再删除通过 aExeName 提供但无法读取的外部 .mab 文件。&lt;/li&gt;&lt;li&gt;TSynLogFile 与 TSynLogFileView 现在可安全处理无 sllEnter 的日志、纯文本剪贴板行与空 level filter。&lt;/li&gt;&lt;li&gt;FreeBSD UNIX-domain socket 大小以及后续 FPC、BSD、Android 编译修复已在最终 build 完成。&lt;/li&gt;&lt;li&gt;新增 TDebugFile.AppendCallerShort；无文本的 TSynLog.Enter 或 Log 现在在 FPC 与 Delphi 上都能解析调用方信息。&lt;/li&gt;&lt;li&gt;Lazarus package 重新生成 mormot2.pas 时现在会保留 mormot.crypt.pkcs11。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-09-19 — POSIX socket 可抵抗 signal，TSynLog 同时更改格式 ABI</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-09-19.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-09-19</guid>
    <pubDate>Sat, 19 Sep 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;这是一次大型跨平台更新。POSIX socket 的等待、accept 与 I/O 现在会在 EINTR 后重试且不延长 deadline；Delphi AArch64 新增 interface dispatch、late-bound variant，并修正时间 cache 对齐。TSynLog 有意把格式化 API 从 PUtf8Char 改为 RawUtf8，并加入锁外预渲染；必须采用最终修复，因为 build 2.4.16999 可能越过 4KB stack buffer。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;应采用 build 2.4.17002 的 4ef9dc663bbf00ad1920c83a7274e3676610b37f。&lt;/li&gt;&lt;li&gt;不要部署 build 2.4.16999：接近 4KB 且带实例前缀的格式化日志可能写出 TSynLog stack buffer。&lt;/li&gt;&lt;li&gt;把 TSynLogProc 及格式化 Log、DoLog、Enter、EnterLocal、ManualEnter 的格式参数从 PUtf8Char 迁移到 const RawUtf8。&lt;/li&gt;&lt;li&gt;POSIX socket I/O、poll、epoll 与 accept 现在会在 EINTR 后重试并保持有限 deadline；请采用完整序列而非中间 build 2.4.16947–2.4.16964。&lt;/li&gt;&lt;li&gt;Delphi AArch64 在 Android/iOS 获得 DispInvoke 与 interface call 支持，并修复 GlobalTime 锁对齐。&lt;/li&gt;&lt;li&gt;Delphi POSIX 修复 ordinal resource 启动挂起，以及短/长 resourcestring 解码互换。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-09-18 — 每个 writer 独立加锁落地，并补上必要的 fallback 修复</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-09-18.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-09-18</guid>
    <pubDate>Fri, 18 Sep 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;TSynLog 用每个 writer 独立的锁替代进程级全局写锁，降低争用，但也暴露出同一批次稍后才修复的失败路径。直接使用 TX64CpuFeatures 的代码必须移除 cpuSSSE3 引用；支持的 x86-64 target 现在会自动选择 SSSE3 JSON 数值 parser。日志查看器、诊断工具与 AppendShortByteHex 调用方也获得了明确的正确性和 API 改进。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;应采用 build 2.4.16943 的 0b26918230d72e33b79365a79c1bc444ec3029b1；避开 build 2.4.16937–2.4.16941 中不完整的 TSynLog 序列。&lt;/li&gt;&lt;li&gt;TSynLog 现在按 logger 分别串行化写入，不再通过单个全局写锁，从而降低独立日志之间的争用。&lt;/li&gt;&lt;li&gt;Build 2.4.16942 修复锁重构引入的 Enter、EnterLocal 与 ManualEnter 失败路径。&lt;/li&gt;&lt;li&gt;TX64CpuFeatures.cpuSSSE3 已移除；需要检测该能力时请使用 CpuFeatures 中的 cfSSSE3。&lt;/li&gt;&lt;li&gt;受支持的非 PIC x86-64 Delphi 与 FPC target 现在会为 JSON 数值自动选择 GetNumericVariantSsse3。&lt;/li&gt;&lt;li&gt;纯文本 TSynLogFile 搜索恢复正常，AppendShortByteHex 也能安全接受大于 255 的 PtrUInt 值。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-09-17 — 日志启动死锁已修复，TLS 1.3 与 POSIX 路径趋于稳定</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-09-17.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-09-17</guid>
    <pubDate>Thu, 17 Sep 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;日志文件创建失败时，代码可能通过未初始化的 writer 递归记录日志，并让 SynLogGlobalLock 一直保持锁定，从而阻塞之后的所有日志线程。本期还完成 TLS 1.3 cipher suite 配置，修复 FPC POSIX 接口分派的 Currency 返回值，并消除 systemd 下 /dev/null 导致的忙循环。直接调用 WaitReadPending 的 POSIX 代码必须适配新的 integer 返回值，直接调用底层 x86-64 数值解析器的代码也应检查重命名后的 SSSE3 入口。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;应采用 build 2.4.16922 的 cdb7dad52a6989d41ce8405a15d26928e0829ca2；它包含最终的日志与 Linux 关闭修复。&lt;/li&gt;&lt;li&gt;启用异常日志时，即使日志文件创建失败，TSynLog 也不会再让所有日志线程死锁。&lt;/li&gt;&lt;li&gt;OpenSSL backend 现在通过 TNetTlsContext.CipherSuites 与 SSL_CTX_set_ciphersuites 配置 TLS 1.3。&lt;/li&gt;&lt;li&gt;FPC POSIX 接口分派现在通过 x87 FP0 路径返回 Currency，而不再把它当作 binary64 结果。&lt;/li&gt;&lt;li&gt;POSIX 上的 WaitReadPending 现在返回 -1、0 或 1；直接调用方必须用显式比较替代 boolean 用法。&lt;/li&gt;&lt;li&gt;复用的 THttpRequestContext 现在会清空 AcceptEncoding，防止压缩偏好泄漏到下一请求。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-09-16 — SSSE3 数值解析登陆 Delphi 与 FPC，并修复边界问题</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-09-16.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-09-16</guid>
    <pubDate>Wed, 16 Sep 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;主要变化是为支持 SSSE3 的 Delphi 与 FPC target 提供共享的 x86-64 assembly 路径，用于 GetExtended 和 GetNumericVariantFromJson，并配有 scalar fallback 与更大的回归矩阵。后续 commit 修复带小数的 MIN_INT64 解析与 FP80 一致性。macOS 版本报告也新增 Golden Gate 支持，但最初的 kernel 映射在本期稍后才修正，因此生产环境应落在 build 2.4.16897，而不是中间 build。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;应采用 build 2.4.16897；数值 assembly 系列在最终 head 前获得 MIN_INT64 与 FP80 修复。&lt;/li&gt;&lt;li&gt;GetExtended 与 GetNumericVariantFromJson 现在会在支持的 Delphi Win64 和 FPC Win64/Linux x86-64 target 上使用 SSSE3 assembly。&lt;/li&gt;&lt;li&gt;Build 2.4.16888 修复 Pascal 与 x86-64 assembly 路径对 -9223372036854775808.0 的解析。&lt;/li&gt;&lt;li&gt;专用 FP80 路径保留 64 位尾数精度，build 2.4.16891 使超范围有符号结果保持一致。&lt;/li&gt;&lt;li&gt;MacKernel 与 Golden Gate 元数据是公开新增项；build 2.4.16892–2.4.16895 使用错误的 Darwin 映射，已在 16896 修复。&lt;/li&gt;&lt;li&gt;GetInteger 与 GetCardinal 现在每轮处理两位数字，公开 signature 不变。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-09-15 — Pascal 数值解析器围绕更快的整数路径完成重写</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-09-15.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-09-15</guid>
    <pubDate>Tue, 15 Sep 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;GetExtended 与 GetNumericVariantFromJson 背后的 Pascal 实现现在让常见整数和短小数走更紧凑的循环，同时继续保护长尾数、指数与 Int64 边界。GetExtended 测试还明确了零符号归一化以及若干 18–20 位小数的结果。公开 signature 无需迁移，但依赖精确 numeric variant type 或浮点边界行为的应用应针对 build 2.4.16865 做验证。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;应采用 build 2.4.16865，并回归测试依赖精确 variant type 或边界舍入的数值转换代码。&lt;/li&gt;&lt;li&gt;非 Win32 的 Pascal GetExtended 路径经过两次精简，为前 18 位数字、带溢出检查的后续数字、小数与指数分别设置快速循环。&lt;/li&gt;&lt;li&gt;GetExtended 的 Pascal 路径现在会按新增测试明确规定的行为，把 -0 与 -0e400 归一化为数值零。&lt;/li&gt;&lt;li&gt;GetNumericVariantFromJson 展开起始数字，并重写 Int64、Currency 与 Double 的选择逻辑，公开 signature 不变。&lt;/li&gt;&lt;li&gt;mormot.core.base 新增公开常量 MIN_INT64 与 TSynVarData.VPtrInt overlay member。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-09-14 — DHCP 请求归属与短数值解析得到修复</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-09-14.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-09-14</guid>
    <pubDate>Mon, 14 Sep 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;DHCP server 现在更严格地遵循 client 状态与 server selection 规则：NAK frame 被清理，指定其他 server 的请求会被忽略，过期的 static address 会被拒绝。后续修复还防止 malformed address option 被误认为真实 IPv4 值。除此之外，GetExtended 不再从仅一两个字符的无效输入中读取四个字节，因此解析不可信数值文本的服务应采用本期版本。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;应采用 build 2.4.16861；build 2.4.16857 至 2.4.16859 可能把 malformed DHCP option 50 或 54 误认为真实地址。&lt;/li&gt;&lt;li&gt;GetExtended 现在会在执行四字节 NAN/INF 探测前拒绝过短的无效 token，防止读取超出所提供文本。&lt;/li&gt;&lt;li&gt;若 DHCP REQUEST 的 server-identifier 指向其他 server，该请求会被忽略，并由新增的 dsmDroppedOtherServer metric 计数。&lt;/li&gt;&lt;li&gt;client 明确请求的地址若已不符合其 static reservation，现在会收到 NAK，而不是 renewal ACK。&lt;/li&gt;&lt;li&gt;DHCPNAK frame 不再包含 lease、network、boot 与 rule option，会保留 packet chaddr，并在无 relay 时广播。&lt;/li&gt;&lt;li&gt;DhcpIP4 对缺失或 malformed 的四字节 option 现返回零，使新的 REQUEST 检查不再产生错误 NAK 或错误丢弃。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
  <item>
    <title>2026-09-13 — 十进制解析在修复零值回归后实现精确 IEEE 舍入</title>
    <link>https://mormot2daily.fsb.dev/edition/2026-09-13.html</link>
    <guid isPermaLink="false">mormot2-daily-2026-09-13</guid>
    <pubDate>Sun, 13 Sep 2026 07:00:00 +0000</pubDate>
    <description>&lt;p&gt;本期继续稳定数值双向转换，并修复会影响生产结果的正确性问题。DoubleToAscii 现可正确处理科学计数法与 64-bit sticky bit 舍入，GetExtended 则接受边界 exponent，并把常见十进制小数舍入到最近的 IEEE double。GetNumericVariantFromJson 也恢复了对 0.0 的数值处理，因此交换 JSON number 或以文本持久化浮点值的 backend 应采用完整变更序列。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;应采用 build 2.4.16851 的 commit c9eff241；它包含版本号最后一次递增后合入的最终十进制舍入修复。&lt;/li&gt;&lt;li&gt;GetNumericVariantFromJson 再次把 0.0 及小数部分全为零的形式解析为数值零，不再导致数值转换失败。&lt;/li&gt;&lt;li&gt;GetExtended 与 GetNumericVariantFromJson 现在会把 1.2 等常见小数转换为最近的 IEEE double，而不是高出一个 ULP 的值。&lt;/li&gt;&lt;li&gt;DoubleToAscii 修复科学计数法的标点生成，并在 CPU64 上应用 sticky bit 舍入，从而改善浮点值与文本的精确往返转换。&lt;/li&gt;&lt;li&gt;非 WIN32DELPHI 的 GetExtended 路径现在可处理最小 subnormal 与最大有限 double 边界，不再过早失败。&lt;/li&gt;&lt;/ul&gt;</description>
  </item>
</channel></rss>
