mORMot2 Daily每日上游提交速读

数值解析得到强化,DHCP setup 消除了悬空指针

数值转换现在会拒绝格式错误的小数、指数溢出以及超出 signed 或 Currency 边界的值,不再发生回绕或接受无效 JSON。TDhcpProcess.Setup 不再跨 scope array 变更保留指针,从而避免可能的 GPF 或 deadlock。日期时间转换新增多项基于整数的 API,同时加入原始 Keccak-256 与 Microsoft TimeSpan 支持;ToNcsaShort 的一次签名变更需要检查源码。

要点

  • 应采用 build 2.4.16828 的最终 head:数值正确性修复在其上合并,但 build number 没有再次递增。
  • GetInteger、GetExtended 和 GetNumericVariantFromJson 现在会拒绝溢出以及无效的小数或指数语法,不再返回回绕或含糊的值。
  • TDhcpProcess.Setup 会在 PrepareScope 可能改变底层 array 前复制每个 scope,消除了已确认的 GPF 或 deadlock 路径。
  • 向 TSynSystemTime.ToNcsaShort 传递普通 ShortString 的调用方必须把该 var 参数改为 TShort23,或使用 TShort23 局部变量。
  • 日期时间层新增整数 Gregorian、Unix millisecond、Julian day、HTTP date 与 Microsoft TimeSpan helper,LDAP 也能解码 atsTimeSpan。
  • mormot.crypt.core 现在支持 Ethereum 等协议使用的原始 Keccak-256 padding,它与 SHA3-256 不同。

升级建议

解析不可信数值 JSON 或重新配置 DHCP scope 的生产系统应采用最终修订 692bbbf21960be5fdf89921673a34f928fadddfc;它仍显示 build 2.4.16828。请搜索 ToNcsaShort 调用:声明为普通 ShortString 的 var 输出必须改成 TShort23,或通过 TShort23 局部变量转接。superseded_by 数据没有标记需要避开的中间 build。

版本号2.4.16805 → 2.4.16828
提交23
行数+1112 -387
阅读2 分钟

21 条中的 21 条 · 上游 23 次提交

主题
# 条目 类别 单元
1 高 ToNcsaShort 现在要求精确的 TShort23 输出变量 mormot.core.datetime 新增 TSynSystemTime.AppendTime 与 AppendInterval,用于紧凑格式化时间和 duration。公开 ToNcsaShort 的 var 参数由 ShortString 改为 TShort23,以匹配固定最大输出长度。 破坏性变更 mormot.core.base+1 5b281032+32-5

core: new TSynSystemTime.AppendTime/AppendInterval methods

影响

由于 Pascal var 参数要求精确类型,传入声明为普通 ShortString 变量的 Delphi 或 FPC 调用可能编译失败。已使用 TShort23 的调用保持兼容。

需要迁移

搜索 ToNcsaShort。将每个输出变量声明为 TShort23,或先传入 TShort23 局部变量,再复制到更宽的 ShortString。

公开 API

  • TSynSystemTime.AppendTimeadded — 追加 hh:mm:ss,可选毫秒。
  • TSynSystemTime.AppendIntervaladded — 格式化天数与 TSynSystemTime 时间字段。
  • TSynSystemTime.ToNcsaShortsignature-changed — var 输出类型由 ShortString 改为 TShort23。

Arnaud Bouchez · 07:48 UTC · 在 GitHub 上查看该提交 →

2 高 格式错误或溢出的数值不再通过 JSON 解析 mormot.core.base 限制 GetInteger 的数字累积和 signed PtrInt 边界。mormot.core.text 的 GetExtended 拒绝重复小数点与指数溢出。mormot.core.variants 强制执行 JSON 数值语法和 Int64/Currency 边界,仅在 AllowVarDouble 允许时将越界值提升为 varDouble。 修复 mormot.core.base+2 d48f4634+222-25

core: fix numeric conversion overflow and malformed decimal input

影响

解析不可信数值文本的 backend 不再得到回绕整数、被接受的错误小数或错误 Currency variant。带前导零的 JSON 数、空指数及超出 signed 边界的值现在会失败,不再被静默转换。

公开 API

  • GetIntegerbehaviour-changed — 溢出现在设置 err,不再回绕。
  • GetExtendedbehaviour-changed — 错误小数与指数溢出现在设置 err。
  • GetNumericVariantFromJsonbehaviour-changed — 现在强制执行 JSON 语法及 signed/Currency 边界。

Mike · 13:45 UTC · 在 GitHub 上查看该提交 →

3 高 DHCP scope 更新不再解引用已重新分配的存储 TDhcpProcess.Setup 现在先把每个旧 scope 复制到新 array,再调用 PrepareScope。PrepareScope 可能改变底层 array,旧顺序会在复制前让源 pointer 悬空。 修复 mormot.net.dhcp 1cd2f994+5-5

net: fixed GPF or deadlock in TDhcpProcess.Setup()

影响

运行中的 DHCP 服务重新应用或修改 scope 配置时,可避开已确认的 GPF 或 deadlock 路径。这影响使用 mormot.net.dhcp 的 Delphi 与 FPC backend。

Arnaud Bouchez · 12:37 UTC · 在 GitHub 上查看该提交 →

4 中 Gregorian 编码公开,TryEncode 改用 var 语义 mormot.core.datetime 公开 EncodeGregorian,用于转换经验证的年、月、日。TryEncodeDate 与 TryEncodeTime 以整数检查重写,其目标参数由 out 改为 var。 破坏性变更 mormot.core.datetime 20876cb4+83-65

core: new EncodeGregorian() low-level computation function

影响

普通直接调用仍源码兼容,但要求精确 out 签名的 procedure variable、wrapper 或 override 可能在 Delphi 或 FPC 下无法编译。无效字段仍返回 false。

值得一看

公开 API

  • EncodeGregorianadded — 验证 1..9999 年、月和日,并返回内部 Gregorian day number。
  • TryEncodeDatesignature-changed — 目标参数从 out 改为 var。
  • TryEncodeTimesignature-changed — 目标参数从 out 改为 var。

Arnaud Bouchez · 17:18 UTC · 在 GitHub 上查看该提交 →

5 中 负 Unix timestamp 获得安全的整数转换 TSynSystemTime.FromUnixTime 与 FromUnixMsTime 现在把 epoch 拆成天数和余数,将负余数调整到前一天,再调用 FromJulianDay 以及 FromSec 或 FromMS。 修复 mormot.core.datetime 91739dd8+32-12

core: rewritten TSynSystemTime.FromUnixTime/FromUnixMsTime

影响

1970 年前的值和毫秒 timestamp 在 Delphi 与 FPC 上避免 TDateTime 舍入,并明确处理负余数。普通正 timestamp 的公开结果不变。

Arnaud Bouchez · 17:23 UTC · 在 GitHub 上查看该提交 →

6 中 原始 Keccak-256 加入 SHA-3 系列 mormot.crypt.core 在 TSha3Algo 末尾追加 KECCAK_256,不改变现有 ordinal,并新增 Keccak256Full 与 Keccak256。实现使用原始 Keccak padding,并测试空输入、abc 及 rate 边界向量。 新功能 mormot.crypt.core c2bc1bf0+70-5

crypt: support original Keccak-256

影响

Delphi 与 FPC backend 可计算协议兼容的 Keccak-256,不会与标准 SHA3-256 混淆。现有 TSha3Algo 值保持其数值表示。

值得一看

公开 API

  • TSha3Algo.KECCAK_256added — 原始 Keccak-256 padding 与 256-bit 输出。
  • Keccak256Fulladded — 将 buffer hash 到 THash256。
  • Keccak256added — 返回 RawByteString 的小写十六进制 Keccak-256。

Mike · 13:26 UTC · 在 GitHub 上查看该提交 →

7 中 TSynSystemTime 可直接解码 Julian day mormot.core.datetime 新增 TSynSystemTime.FromJulianDay,并让 FromDate 使用新的整数 Gregorian 分解,而不是 TDateTime 转换。 新功能 mormot.core.datetime f8fe89b2+46-21

core: new TSynSystemTime.FromJulianDay method

影响

已有 Julian day 的 Delphi 与 FPC 代码可在不做浮点转换的情况下填充 TSynSystemTime。现有 FromDate 调用接口不变。

值得一看

公开 API

  • TSynSystemTime.FromJulianDayadded — 从 Julian day number 填充日期字段。

Arnaud Bouchez · 17:14 UTC · 在 GitHub 上查看该提交 →

8 中 Microsoft TimeSpan tick 可转换为结构化及文本 interval mormot.core.datetime 新增 TimeSpanAppendShort、TimeSpanToTextVar、TimeSpanToText 与 TSynSystemTime.FromTimeSpan。signed Microsoft 100 ns tick 被拆分为天数和时间字段,并以毫秒精度输出。 新功能 mormot.core.datetime 1219fff2+48-2

core: Microsoft TimeSpan 100 ns ticks decoding support

影响

Delphi 与 FPC backend 可无需自定义运算便解码目录或 .NET duration。输出结果按设计不保留亚毫秒 tick 精度。

值得一看

公开 API

  • TimeSpanAppendShortadded — 追加格式化的 Microsoft TimeSpan。
  • TimeSpanToTextVaradded — 将 interval 写入文本 variant。
  • TimeSpanToTextadded — 以 RawUtf8 返回格式化 interval。
  • TSynSystemTime.FromTimeSpanadded — 将 signed 100 ns tick 解码为天数及时间字段。

Arnaud Bouchez · 07:49 UTC · 在 GitHub 上查看该提交 →

9 中 TSynSystemTime 可直接输出 Unix 毫秒 mormot.core.datetime 新增 TSynSystemTime.ToUnixMsTime,并基于 EncodeGregorian 重写 ToUnixTime,使用整数日期时间运算而非 TDateTime 转换。 新功能 mormot.core.datetime c5731496+15-7

core: new TSynSystemTime.ToUnixTime/ToUnixMSTime methods

影响

Backend 可在不经过浮点中间值的情况下获得毫秒 epoch。现有 ToUnixTime 调用保持相同签名,但使用新的整数实现。

值得一看

公开 API

  • TSynSystemTime.ToUnixMsTimeadded — 返回 Unix epoch 起的毫秒数。
  • TSynSystemTime.ToUnixTimebehaviour-changed — 现使用整数 Gregorian 运算。

Arnaud Bouchez · 17:20 UTC · 在 GitHub 上查看该提交 →

10 中 LDAP 可输出 Microsoft TimeSpan 属性 mormot.net.ldap 在 TLdapAttributeTypeStorage 中新增 atsTimeSpan。属性解码读取 signed 100 ns tick 值,并传给 TimeSpanToTextVar 输出可读 interval。 新功能 mormot.net.ldap 22e8328a+9-2

net: introducing atsTimeSpan LDP attribute decoding

影响

LDAP backend 可将 Microsoft duration 属性映射为文本,不再保留不透明的 64-bit tick 表示。新成员追加在末尾,因此现有属性存储模式的 ordinal 不变。

值得一看

公开 API

  • TLdapAttributeTypeStorage.atsTimeSpanadded — 将 signed Microsoft TimeSpan tick 解码为文本。

Arnaud Bouchez · 08:28 UTC · 在 GitHub 上查看该提交 →

11 中 TTimeLogBits 的 Unix 转换避开 TDateTime 运算 mormot.core.datetime 将 TTimeLogBits.FromUnixTime 经由 TSynSystemTime 处理,以秒精度实现 FromUnixMsTime,并用 EncodeGregorian 整数运算计算 ToUnixTime。 性能 mormot.core.datetime f5669b62+20-19

core: enhanced TTimeLogBits conversion methods

影响

Delphi 和 FPC backend 获得确定性的整数转换并避免浮点舍入。TTimeLogBits 仍只保存整秒,因此毫秒输入会按设计截断。

Arnaud Bouchez · 17:23 UTC · 在 GitHub 上查看该提交 →

12 中 数据库日期适配器统一使用无效时返回零的 encoder mormot.core.datetime、mormot.db.raw.odbc 与 mormot.db.raw.oracle 在 ISO、SQL_TIMESTAMP_STRUCT 和 TOracleDate 转换路径中,用 EncodeDateOrZero 与 EncodeTimeOrZero 替换重复的 TryEncodeDate/TryEncodeTime 分支。 内部重构 mormot.core.datetime+2 d7a78957+36-73

core/db: use EncodeDateOrZero/EncodeTimeOrZero when possible

影响

无效输入按设计仍返回零,但 Delphi/FPC 数据库 backend 现在共用同一验证实现。现有 ODBC 与 Oracle 应用调用无需变化。

Arnaud Bouchez · 17:22 UTC · 在 GitHub 上查看该提交 →

13 低 日期时间 encoder 新增返回零的 wrapper mormot.core.datetime 公开 EncodeDateOrZero 与 EncodeTimeOrZero。两者分别调用对应的 TryEncode,并在字段无效时返回零。 新功能 mormot.core.datetime 1d5e8861+35-2

core: introducing EncodeDateOrZero/EncodeTimeOrZero wrappers

影响

当零可作为无效 sentinel 时,Delphi 和 FPC 调用方可省去布尔分支。现有 API 与行为不变。

值得一看

公开 API

  • EncodeDateOrZeroadded — 日期字段无效时返回零。
  • EncodeTimeOrZeroadded — 时间字段无效时返回零。

Arnaud Bouchez · 17:20 UTC · 在 GitHub 上查看该提交 →

14 低 ISO 时间片段新增可复用 buffer parser mormot.core.datetime 新增 TSynSystemTime.FromTimeBuffer,从 pointer 与 length 解析小时、分钟和可选秒字段。FromHttpDateBuffer 复用它处理时间部分。 新功能 mormot.core.datetime e570e19e+23-10

core: new TSynSystemTime.FromTimeBuffer method

影响

面向 buffer 的 parser 可在不分配字符串的情况下填充 TSynSystemTime。现有 HTTP date 解析保留原接受格式并复用该 helper。

值得一看

公开 API

  • TSynSystemTime.FromTimeBufferadded — 从 pointer 与 byte length 解析时间。

Arnaud Bouchez · 17:11 UTC · 在 GitHub 上查看该提交 →

15 低 POSIX epoch 转换改用优化后的 Gregorian splitter mormot.core.os.posix 中 POSIX EpochToSystemTime 的实现改用共享整数例程 DaysToGregorian,替代原先的日历分解。 性能 mormot.core.os.posix 5313e545+34-29

core: rewritten EpochToSystemTime() on POSIX

影响

POSIX Delphi/FPC backend 减少日历转换开销。没有公开签名变化,也不需要应用迁移。

Arnaud Bouchez · 17:08 UTC · 在 GitHub 上查看该提交 →

16 低 闰年判断改用无除法整数运算 mormot.core.datetime 用 inline 整数比较与 reciprocal 运算替代取模除法来重写 IsLeapYear,并保持 Gregorian 闰年规则。 性能 mormot.core.datetime 8d552e6b+26-30

core: rewritten IsLeapYear()

影响

应用代码无需改动。Delphi 和 FPC 上重复日历转换成本更低,闰年判断结果保持一致。

Arnaud Bouchez · 17:16 UTC · 在 GitHub 上查看该提交 →

17 低 HTTP date 现改用整数 system-time 转换路径 mormot.core.datetime 让 TSynSystemTime.FromHttpDateBuffer 复用 FromTimeBuffer,并通过 TSynSystemTime.ToUnixTime 转换解析后的 HTTP date,不再经过 TDateTime。tolocaltime 参数现默认 false。 性能 mormot.core.datetime e498b9ef+12-14

core: enhanced HTTP date support

影响

显式传参的现有调用行为不变。省略 tolocaltime 的调用现在使用明确的 UTC 默认值,Delphi 和 FPC 的 HTTP 解析也避免了浮点日期转换。

公开 API

  • TSynSystemTime.FromHttpDateBuffersignature-changed — tolocaltime 现默认 false。

Arnaud Bouchez · 17:24 UTC · 在 GitHub 上查看该提交 →

18 低 Delphi Win64 年份格式化以乘法替代除法 mormot.core.base 新增 DIV100_INV,并在 Delphi Win64 的 YearToPChar 汇编路径中使用 reciprocal multiplication。现有 x86 与 x64 汇编字面值统一为同一常量。 性能 mormot.core.base+2 906a9037+16-10

core: optimized YearToPChar() for Delphi Win64

影响

只有 Delphi Win64 格式化成本会降低;FPC 与其他目标保持等效代码。应用调用与输出不变。

公开 API

  • DIV100_INVadded — 用于除以 100 的公开 reciprocal constant。

Arnaud Bouchez · 17:07 UTC · 在 GitHub 上查看该提交 →

19 低 正负 TimeSpan 值新增回归测试 test.core.base 新增 Microsoft TimeSpan 双向转换断言,包括 signed interval。生产 unit 的改动明确了 100 ns tick scale。 测试 mormot.core.os d3dfb00c+27-3

tests: validate TimeSpan conversion

影响

应用代码无需改动。Delphi 与 FPC build 增加对符号处理及前一 commit 引入文本格式的覆盖。

Arnaud Bouchez · 07:50 UTC · 在 GitHub 上查看该提交 →

20 低 日期、Unix 与 hash 边界情况新增回归测试 test.core.base 新增闰年、Unix 秒与 Unix 毫秒往返及 HTTP date 断言。test.core.crypt 补充 SHA-3 和 Keccak 边界覆盖。 测试 6356fbaa+17-6

tests: cover latest date/time conversion functions

影响

应用代码无需改动。Delphi 和 FPC build 为本批次引入的转换路径增加了回归覆盖。

Arnaud Bouchez · 17:25 UTC · 在 GitHub 上查看该提交 →

21 低 内部命名与声明清理,不改变行为 多个 core、search、thread 与 DHCP 声明被重命名、重排或补充说明。内嵌 diff 和 commit message 均未显示功能变化或公开 API 移除。 杂项 mormot.core.datetime+3 bebea2f9+12-12

all: some code cleaning with no functional change

影响

对应用代码、Delphi/FPC 行为或存储数据均无影响;这只是源码清理。

Arnaud Bouchez · 17:11 UTC · 在 GitHub 上查看该提交 →

上游活动 每日提交数 · 最近 60 天
提交977
活跃天数44/60
最忙一天2026-09-30
峰值60
2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 26 commits2026-08-28: 11 commits2026-08-29: 10 commits2026-08-30: 1 commit2026-08-31: 23 commits2026-09-01: 0 commits2026-09-02: 20 commits2026-09-03: 29 commits2026-09-04: 35 commits2026-09-05: 13 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 23 commits2026-09-09: 10 commits2026-09-10: 17 commits2026-09-11: 23 commits2026-09-12: 14 commits2026-09-13: 9 commits2026-09-14: 7 commits2026-09-15: 4 commits2026-09-16: 24 commits2026-09-17: 26 commits2026-09-18: 21 commits2026-09-19: 59 commits2026-09-20: 13 commits2026-09-21: 5 commits2026-09-22: 34 commits2026-09-23: 17 commits2026-09-24: 57 commits2026-09-25: 22 commits2026-09-26: 26 commits2026-09-27: 0 commits2026-09-28: 2 commits2026-09-29: 19 commits2026-09-30: 60 commits2026-10-01: 26 commits2026-10-02: 30 commits2026-10-03: 32 commits2026-10-04: 15 commits2026-10-05: 1 commit2026-10-06: 26 commits2026-10-07: 37 commits2026-10-08: 27 commits2026-10-09: 35 commits2026-10-10: 33 commits2026-10-11: 9 commits2026-10-12: 11 commits2026-10-13: 35 commits
2026-08-152026-10-13