立即处理可能影响正在运行的系统两个合并提交无需单独条目。合并 #554 引入 THttpServerRequestAbstract.SetOutStream 及流所有权/Range 处理;合并 #572 落地了已在其非合并提交中审查的 HTTP API WebSocket 延迟初始化。版本记录文件已忽略。
线程结束清理自动化,同时回调类型发生变化
线程终止清理现集中到 TThreadAbstract;对重写或绑定相关回调及 REST/ORM 方法的应用,这会造成源码级签名不兼容。另一个修复避免 TWebSocketProtocol.SetEncryptKey 在 aSettings 为 nil 时静默关闭加密。Windows HTTP API WebSocket 启动、多个共享缓存和周期清理触发器也获得并发修复;同时合并的新功能允许 HTTP 处理器直接从 TStream 流式发送响应体。
要点
- TOnNotifyThread 现接收 TThreadAbstract,TSynLogFamily.OnThreadEnded 被移除,相关 REST/ORM 虚方法也改用 TThreadAbstract。
- 使用非空密钥且 aSettings = nil 时,TWebSocketProtocol.SetEncryptKey 现在仍会启用加密。
- HTTP API WebSocket 采用延迟且串行的初始化;Wine 明确避开不完整的 websocket.dll 与 http.sys 路径。
- HTTP 处理器可通过 SetOutStream 返回 TStream;socket 服务器直接流式发送,http.sys 与 REST-over-WebSockets 则在文档限制内缓冲。
- CAS 与锁修复避免并发请求重复执行空闲、会话、缓存及连接清理。
升级建议
若使用 aSettings=nil 的 WebSocket 加密、Windows HTTP API WebSocket 或受影响的共享缓存,请升级到 build 2.4.16737。重新编译自定义线程回调及 REST/ORM 派生类:TOnNotifyThread 与多个虚方法现要求 TThreadAbstract。直接调用 LockedGet32 的代码须改为 LockedReset32。原始数据未报告本期还有后续替代提交。
33 条中的 33 条 · 上游 35 次提交
1
高
REST 与 ORM 线程钩子现要求 TThreadAbstract
mormot.rest.core、mormot.rest.server、mormot.rest.http.server 与 mormot.orm 中公开的 BeginCurrentThread、EndCurrentThread、OnBeginCurrentThread、OnEndCurrentThread、HttpThreadStart 和 HttpThreadTerminate 声明由 TThread 改为 TThreadAbstract,并移除旧的显式日志族清理。
破坏性变更
mormot.orm.core+5
69869f49+33-36
rest/orm: use TOnNotifyThread new definition
影响
重写这些虚方法的自定义派生类以及绑定到钩子的过程变量可能无法编译,需将 Sender 参数收窄为 TThreadAbstract。运行时清理由新基类路径完成。
需要迁移
搜索 BeginCurrentThread、EndCurrentThread、OnBeginCurrentThread、OnEndCurrentThread、HttpThreadStart 与 HttpThreadTerminate 的重写及回调;将 Sender: TThread 改为 Sender: TThreadAbstract 后重新编译。
公开 API
TRest.BeginCurrentThread / TRest.EndCurrentThreadsignature-changed — Sender 从 TThread 改为 TThreadAbstract。TRestOrmParent.BeginCurrentThread / TRestOrmParent.EndCurrentThreadsignature-changed — Sender 从 TThread 改为 TThreadAbstract。
2
高
TOnNotifyThread 参数收窄且日志族回调被移除
mormot.core.threads 将 TOnNotifyThread 从 procedure(Sender: TThread) 改为 procedure(Sender: TThreadAbstract)。新增 TThreadAbstract.OnThreadEnded,mormot.core.log 移除 TSynLogFamily.OnThreadEnded,并把 TLoggedThread 清理移出其 DoTerminate。
破坏性变更
mormot.core.log+1
f1f8d766+12-13
core: breaking change of TSynLogFamily.OnThreadEnded into TThreadAbstract
影响
声明为 Sender: TThread 的现有回调方法不再兼容 TOnNotifyThread,直接引用 TSynLogFamily.OnThreadEnded 也无法编译。Delphi 与 FPC 项目均需源码迁移。
需要迁移
搜索 TOnNotifyThread 绑定及 Sender: TThread 处理器,将其改为 Sender: TThreadAbstract;把 TSynLogFamily.OnThreadEnded 引用替换为 TThreadAbstract.OnThreadEnded 或依赖 TThreadAbstract 自动清理。
公开 API
TOnNotifyThreadsignature-changed — Sender 现为 TThreadAbstract,而非 TThread。TSynLogFamily.OnThreadEndedremoved — 清理职责移至 TThreadAbstract。TThreadAbstract.OnThreadEndedadded — 使用新回调类型封装 TSynLog.NotifyThreadEnded。
3
高
LockedGet32 更名并可原子写入任意整数
mormot.core.base 将公开函数 LockedGet32(Target) 替换为 LockedReset32(Target, New),New 默认为零。mormot.net.async 的两个唤醒计数器调用点同步更新。
破坏性变更
mormot.core.base+1
bcf834a5+9-9
core: new LockedReset32() wrapper function
影响
直接调用 LockedGet32 的代码将无法编译。省略第二个参数的 LockedReset32 保留原先与零交换的行为,新参数也允许写入其他替换值。
需要迁移
搜索 LockedGet32 并将每个调用改为 LockedReset32;仅在需要非零替换值时传入 New。
公开 API
LockedGet32removed — 由 LockedReset32 替代。LockedReset32added — 原子返回 Target^ 并写入 New,默认值为零。
4
高
WebSocket 设置指针为 nil 时不再关闭加密
mormot.net.ws.core 的 TWebSocketProtocol.SetEncryptKey 现在仅在密钥为空时退出,不再因 aSettings=nil 退出。无设置时先尝试默认 ECDHE 文件处理,再尝试完整密钥语法,最后用旧版 Sha256Weak 派生 AES-CTR-128 密钥。
安全
mormot.net.ws.core
57660dac+18-11
net: fixed TWebSocketProtocol.SetEncryptKey() with aSettings = nil
影响
此前非空密钥配合 nil 设置指针会清空 fEncryption 并返回,使协议静默处于未加密状态。相同调用现在会按文档兼容默认值建立加密。
建议升级
凡以非空密钥和 nil 设置调用 SetEncryptKey 的端点均应升级,并确认两端协商预期密码算法。新配置的密码应优先使用显式 PBKDF2 设置。
公开 API
TWebSocketProtocol.SetEncryptKeybehaviour-changed — aSettings=nil 现在选择兼容默认值,而非关闭加密。
5
高
HTTP API WebSocket 构造时安全初始化 websocket.dll
mormot.net.server 的 THttpApiWebSocketServer.Create 在检查 WebSocketApi.WebSocketEnabled 前调用 WebSocketApiInitialize。mormot.lib.winhttp 在可重入全局锁内加载 DLL 并绑定导出,新测试覆盖构造器首次使用及 16 线程并发初始化。
修复
mormot.lib.winhttp+1
41dbfbba+211-18
fix: initialize HTTP API WebSockets lazily
影响
Windows HTTP API WebSocket 服务器可作为进程首个 WebSocket API 使用者,不再错误抛出“not supported”;并发首次使用也不会看到未完整绑定的函数指针。
建议升级
在任何 WinHTTP WebSocket 客户端之前构造 THttpApiWebSocketServer 的 Windows 服务应升级。
公开 API
THttpApiWebSocketServer.Createbehaviour-changed — 检查可用性前执行 WebSocket API 延迟初始化。
6
中
最终并发整理避免旧缓存结果覆盖新值
在 mormot.core.os 中,TCachedValue.Cache 仅在 TixShr 仍等于回调前占用的 tick 时写入慢回调结果。该提交还让 TSynDictionary 使用 VCardinal 读取,并简化 mormot.rest.server 中的等价代码,其他单元主要是注释。
修复
mormot.core.json+4
14d901e8+16-16
all: some refactoring after today's commits
影响
并发调用者不再会让较旧且较慢的计算覆盖更新的缓存值。本提交不改变现有 Delphi/FPC 应用 API。
建议升级
若代码从多个线程使用 TCachedValue,请采用此最终 build。
7
中
REST 服务器时间戳缓存采用原子刷新与加锁读取
mormot.rest.core 的 TRest.GetServerTimestamp 使用 LockedExc32,为每个 512 ms 时间段选出单一刷新者。TLightLock 现保护缓存 TTimeLogBits 的读写。
修复
mormot.rest.core
ad1dcbf5+18-12
rest: made TRest.GetServerTimestamp atomic
影响
并行 REST 请求会读取一致的服务器时间戳;这对 64 位值并非天然原子的 32 位 Delphi/FPC 尤其重要。应用 API 不变。
建议升级
若同一 TRest 实例在 32 位目标上处理并发请求,建议升级。
8
中
复用日志线程槽时完整重置本地状态
mormot.core.log 的 TSynLog.NotifyThreadEnded 现清零 ThreadNumber 作为一次性复用标记;InitThreadNumber 在分配复用槽前重置 RecursionCount 与 Flags。ThreadBitLo 仍用于延迟初始化标记。
修复
mormot.core.log
35d353c9+13-9
core: fixed TSynLog.NotifyThreadEnded threads recycling
影响
复用 TSynLog 槽的短生命周期线程不再继承前一线程的递归计数或逐线程日志标志,可避免静默抑制日志或残留行为。
建议升级
频繁创建销毁日志线程或自定义逐线程 TSynLog 标志的服务应升级。
9
中
Kerberos keytab 刷新串行化且重载不占用锁
mormot.lib.gssapi 的 TServerSspiKeyTab.TryRefresh 使用 fSafe 占用每个两秒刷新窗口,释放锁后再调用 SetKeyTab。tick 加一,避免首个有效周期与初始零值混淆。
修复
mormot.lib.gssapi
6f53f3d7+14-7
lib: optimized TServerSspiKeyTab.TryRefresh thread safety
影响
并发 SSPI/GSSAPI 认证不会同时重载同一 keytab,其他调用也无需在锁内等待文件解析。公开 API 不变。
建议升级
使用 Kerberos 且在并发请求期间刷新 keytab 的服务器应升级。
10
中
WebSocket DLL 仅探测一次,并在 Wine 下禁用
mormot.lib.winhttp 的 TWebSocketApi 增加 Tested 标志。WebSocketApiInitialize 在全局锁内记录首次加载尝试,避免反复失败,并在仅提供部分 websocket.dll 桩的 Wine 上直接返回。
修复
mormot.lib.winhttp
2f0cdace+14-6
lib: fixed WebSocketApiInitialize
影响
不支持的 Windows 环境不会重复探测 DLL;Wine 也不会仅因存在桩导出而被误判为支持 WebSocket。受支持的原生系统只初始化一次。
建议升级
Windows 或 Wine 部署应与延迟初始化及 wsWeakHttpSys 提交一并采用。
公开 API
TWebSocketApi.Testedadded — 记录 websocket.dll 可用性已完成探测。
11
中
并发 REST 请求不再同时触发 OnIdle
mormot.rest.server 的 TRestServer.Uri 将 fOnIdleLastTix 的先读后写检查改为 LockedExc32 比较交换。只有推进 tick 的请求会调用 OnIdle。
修复
mormot.rest.server
7df2308e+8-8
rest: fixed TRestServer.OnIdle trigger
影响
多个请求在同一 tick 完成时,OnIdle 处理器不再因此并发进入。包含非可重入空闲任务的后端可避免重复维护与竞态。
建议升级
若 TRestServer.OnIdle 执行有状态或不可重入的维护任务,请升级。
公开 API
TRestServer.OnIdlebehaviour-changed — 每个 tick 最多由一个请求调用。
12
中
全局时间缓存的比较交换不再复用期望值变量
mormot.core.datetime 的 FromGlobalTime 将 GlobalTime.clock 复制到局部变量 c,并把这个稳定期望值传给 LockedExc32。此前调用同时以 clock 作为目标和期望参数。
修复
mormot.core.datetime
f7cfb5db+8-5
core: fixed FromGlobalTime() atomicity
影响
并发时间格式化在更新共享 16 ms 缓存前采用明确的 CAS 选举。Delphi/FPC 调用者的 FromGlobalTime 签名与精度不变。
建议升级
频繁格式化全局或本地时间戳的多线程服务器应升级。
13
中
TLoggedThread 即使未写日志也会释放日志状态
mormot.core.threads 的 TLoggedThread.DoTerminate 移除 fLog 为 nil 时的提前退出,在 inherited DoTerminate 后无条件调用类级 TSynLog.NotifyThreadEnded,再清空 fLog。
修复
mormot.core.threads
2c03b28a+3-5
core: fixed TLoggedThread.DoTerminate
影响
已获取线程本地日志元数据但未输出记录的 TLoggedThread 现在会正确归还槽位,长期运行服务可避免日志线程注册表逐渐耗尽。
建议升级
拥有大量短生命周期 TLoggedThread(包括可能不写日志即结束)的服务应升级。
14
中
预连接隧道工作线程现在以成功网络结果启动
mormot.net.tunnel 的 TTunnelLocalThread.DoExecute 在主线程已建立 socket 连接时,先设置 res := nrOk,再设置 fState := stProcessing。此前该分支会留下未初始化或陈旧的 res。
修复
mormot.net.tunnel
677a3579+5-2
net: fixed TTunnelLocalThread process
影响
使用主线程已连接 socket 的隧道会话不再把未定义网络结果带入后续关闭或错误处理。连接流程及 API 签名不变。
建议升级
使用主线程建立 socket 的 TTunnelLocalThread 部署应升级。
15
中
TCachedValue 在释放锁前预留刷新任务
mormot.core.os 的 TCachedValue.Cache 在 Safe 锁内设置 Tix32,然后在锁外执行慢 Call 回调,从而在其他线程进入前标记刷新已被占用。
修复
mormot.core.os
84ab9449+3-3
core: fixed race in TCachedValue.Cache
影响
多个调用者不再于同一周期启动相同的昂贵缓存计算。后续 14d901e 还阻止延迟的旧计算覆盖新结果。
建议升级
请采用本期最终版本,不要停在此提交,因为 14d901e 完成了并发缓存更新保护。
16
中
TThreadAbstract 现在线程结束时总会清理日志
mormot.core.threads 的 TThreadAbstract.DoTerminate 在继承终止及旧版 Finished 更新后调用 TSynLog.NotifyThreadEnded,并吞掉关闭异常。框架队列和计时器移除显式 OnThreadEnded 回调;独立日志刷新 TThread 保留手动调用。
新功能
mormot.core.log+2
8ef4ae1b+30-35
core: TThreadAbstract calls TSynLog.NotifyThreadEnded
影响
正确执行 inherited DoTerminate 的每个派生类都会自动释放逐线程日志状态。直接继承 TThread 且使用 TSynLog 的类仍需自行调用 TSynLog.NotifyThreadEnded。
值得一看
公开 API
TThreadAbstract.DoTerminatebehaviour-changed — 线程关闭时自动调用 TSynLog.NotifyThreadEnded。
17
中
TThreadAbstract 在 Delphi 7/2007 上统一提供 Finished
当 RTL 缺少相关成员时,mormot.core.threads 为 TThreadAbstract 增加模拟的公开 Finished 属性与 fFinished 字段,并在 DoTerminate 设置。TLoggedThread.ExecuteDone 被移除,mormot.net.tftp.server 改用 Finished。
编译器与平台
mormot.core.threads+1
5678b9d9+31-13
core: emulate TThread.Finished property on Delphi 7/2007
影响
旧版 Delphi 可与新版 Delphi/FPC 一样检查 TThreadAbstract.Finished。引用公开 TLoggedThread.ExecuteDone 属性的代码须改用 Finished。
需要迁移
搜索 TLoggedThread.ExecuteDone,并替换为继承的 Finished 属性。
公开 API
TThreadAbstract.Finishedadded — 在 Delphi 7/2007 上模拟;较新 RTL 已提供。TLoggedThread.ExecuteDoneremoved — 请改用 Finished。
18
中
Wine 新增明确的弱 http.sys 能力标志
mormot.core.os 向 TWindowsSpecs 增加 wsWeakHttpSys,并在检测到 Wine 时设置。mormot.rest.http.server 的 TRestHttpServer.Create 使用该能力标志,从 HTTP_API_MODES 回退到 useHttpAsync。
编译器与平台
mormot.core.os+3
b4238a29+10-8
net: introducing wsWeakHttpSys flag
影响
Wine 下的 REST 服务器会避开已知不完整的 http.sys 实现,改用异步 socket 服务器。原生 Windows 行为不变。
建议升级
请求 HTTP API 服务器模式的 Wine 部署应升级,并检查日志中的 useHttpAsync 回退。
公开 API
TWindowsSpecs.wsWeakHttpSysadded — 标记不应选择 http.sys 的环境。
19
中
HTTP API WebSocket 工作线程跟进新回调类型
mormot.net.server 将 TSynThreadPoolHttpApiWebSocketServer.OnThreadStart 与 OnThreadTerminate 参数改为 TThreadAbstract。TSynWebSocketGuard 现继承 TThreadAbstract,并移除手动 TSynLog.NotifyThreadEnded。
编译器与平台
mormot.net.server
f115b536+7-8
net: follow new TThreadAbstract / TOnNotifyThread definitions
影响
框架 WebSocket 工作线程与守护线程适配新的 TOnNotifyThread 契约并获得自动日志清理。重写受保护回调的自定义派生类可能也需更新签名。
值得一看
20
低
字典过期扫描增加每秒原子门控
mormot.core.json 的 TSynDictionary.DeleteDeprecated 通过新增的 TSynVarData.VCardinal 视图读取共享 tick,并用 LockedExc32 占用扫描。mormot.core.base 增加了该变体记录字段。
性能
mormot.core.base+1
c7887dc9+35-33
core: ensure TSynDictionary.DeleteDeprecated trigger is atomic
影响
并发字典使用者不会在同一秒重复执行过期扫描。TSynDictionary 行为保持不变;检查 TSynVarData 的代码可使用新增的无符号视图。
公开 API
TSynVarData.VCardinaladded — 变体记录的 32 位无符号叠加字段。
21
低
每个周期只执行一次连接池过期扫描
mormot.db.sql 的 TSqlDBConnectionPropertiesThreadSafe.ThreadSafeConnection 在调用 DeleteDeprecated 前以 LockedExc32 取代未同步的时间戳赋值。ClearConnectionPool 原子重置触发器。
性能
mormot.db.sql
a6d76aa9+12-9
db: use CAS for TSqlDBConnectionPropertiesThreadSafe.DeleteDeprecated
影响
在并发数据库流量下,每 32 秒只有一个线程执行可选的过期连接扫描。后端行为及公开 API 不变。
22
低
MVC 方法缓存每秒只清理一次
mormot.core.mvc 的 TMvcRunWithViews 处理流程现在先用 LockedExc32 占用 fOnIdlePurgeCacheTix32,再调用 PurgeMethodCache;PurgeMethodCache 不再自行赋值该 tick。
性能
mormot.core.mvc
83f4846b+6-5
mvc: atomic TMvcRunWithViews.PurgeMethodCache
影响
并发 MVC 请求不会在同一秒内重复完整扫描缓存。缓存结果及应用可见的 MVC API 行为保持不变。
23
低
每个周期仅一个请求清理过期 REST 会话
mormot.rest.server 的 TRestServerUriContext.Authenticate 现在先用 LockedExc32 推进 fSessionsDeprecatedTix,再调用 SessionDeleteDeprecated;清理例程不再另做非原子赋值。
性能
mormot.rest.server
14d5a05d+6-5
rest: use a CAS trigger for TRestServer.SessionDeleteDeprecated
影响
高负载认证服务器可避免多个请求线程同时进入每秒一次的过期扫描。会话过期语义及公开 API 不变。
24
低
HTTP 日志时间戳每秒仅由一个线程格式化
mormot.net.http 的 THttpLogger.Append 在调用 SetTimeText 前对 fTimeTix32 使用 LockedExc32。竞争请求线程会复用缓存的 ISO-8601 与 NCSA 字符串。
性能
mormot.net.http
d7b698d8+6-5
net: optimized THttpLogger.Append time update
影响
高吞吐 HTTP 日志减少重复日期转换,同时保留原有的一秒缓存。日志格式及公开 API 不变。
25
低
StackTrace 声明恢复 Delphi 7 编译兼容
mormot.core.log 仅在定义 HASINLINE 时为两个重载 TSynLog.StackTrace 声明添加 static 指令,旧版 Delphi 不再解析不支持的指令。
编译器与平台
mormot.core.log
332614f5+6-4
code: fixed Delphi 7 compilation
影响
使用 mormot.core.log 的 Delphi 7 构建可再次编译。较新 Delphi 与 FPC 目标的 StackTrace API 及运行行为不变。
建议升级
若 Delphi 7 在 TSynLog.StackTrace 声明处编译失败,请升级。
26
低
编译器特性标志现描述 TThread.Finished 可用性
mormot.defines 为 FPC 与 Unicode Delphi 增加 HASTTHREADFINISHED,并在 Windows Delphi 下定义前补充 WINDELPHI 文档。这些条件服务于旧版 TThread 兼容代码。
编译器与平台
mormot.defines
86422854+6-3
core: added missing HASTTHREADFINISHED conditional
影响
框架仅在 Delphi 7/2007 上启用 Finished 模拟,不再用于已提供该属性的目标。应用代码无直接 API 变化。
27
低
响应流后续整理加强清理与测试诊断
SetOutStream 合并后,mormot.net.http 让 OutContentStreamDiscard 对 nil 安全,并集中重置字段。mormot.net.async 明确 AsyncResponse 会丢弃待发送流;测试改用 RaiseStreamError 并忽略预期 EStreamError 日志。
内部重构
mormot.net.async+1
7627b1ad+20-26
net: some refactoring after #554
影响
自有响应流仍会释放,延迟异步内容仍替换任何待发送流。本后续提交不改变文档中的 SetOutStream API 或服务器能力限制。
28
低
启动 nonce 不再递归进入主 Random128 生成器
mormot.crypt.secure 的 TCryptRandomEntropy.Create 改用 RandomBytes 而非 Random128 填充 16 字节应用级 nonce。相关注释说明 TAes.EncryptInitRandom 必须避免 Random128 递归,系统随机调用用于回退播种。
内部重构
mormot.core.os.posix+5
a0141ee6+13-23
core: don't call Random128() at startup
影响
密码熵源初始化避免在主 PRNG 构造期间再次进入它。nonce 仍为随机值;公开随机 API 与生成数据格式不变。
29
低
全局时间缓存直接存储 TSynSystemTime
mormot.core.datetime 将 GlobalTime 缓存字段从 TSystemTime 改为 TSynSystemTime,并移除 FromGlobalTime 中的局部 absolute 别名。填充仍使每个缓存记录占 64 字节。
内部重构
mormot.core.datetime
6dda432f+12-11
core: simplified FromGlobalTime() implementation
影响
这简化了内部复制,不改变公开 FromGlobalTime 契约或 16 ms 缓存精度。现有 Delphi/FPC 应用代码不受影响。
30
低
Angelize 看门狗移除手动日志清理回调
mormot.app.agl 从 TSynAngelizeRunner 与看门狗创建中移除显式 TSynLog.NotifyThreadEnded 和 log.Family.OnThreadEnded 调用;其 TThreadAbstract 继承链现在负责清理。
内部重构
mormot.app.agl
afde3637+4-5
agl: follow new TThreadAbstract feature
影响
Angelize 行为应保持不变,线程结束通知由集中机制执行,而非每个类手动调用。应用 API 不变。
31
低
SQLite 与 PostgreSQL 线程适配集中式日志清理
mormot.db.sql.postgres 从基于 TThreadAbstract 的异步线程移除冗余 SynDBLog.NotifyThreadEnded。SQLite 备份线程仍是普通 TThread,并保留注明原因的 SQLite3Log.NotifyThreadEnded 调用。
内部重构
mormot.db.raw.sqlite3+1
9a1c1313+4-5
db: adapt to the new TThreadAbstract class
影响
数据库线程日志清理应恰好执行一次,不改变 SQLite 备份或 PostgreSQL 异步行为。面向应用的数据库 API 不变。
32
低
测试与日志示例改用 TThreadAbstract
dmvc-ai 日志示例与 test.net.proto 中的 TPipeConsumerThread 现从 TThreadAbstract 而非 TThread 继承。本提交不改动框架实现或公开声明。
测试
56660c17+4-4
test: favor TThreadAbstract usage
影响
应用代码不受影响;更新后的示例展示推荐基类,使线程结束日志清理自动执行。
33
低
Sha256Weak 文档明确仅供旧版兼容
mormot.crypt.core 注释说明 Sha256Weak 会填充短于 256 字节的输入,仅用于 mORMot 1 兼容,不应在新代码或新生成数据中使用,并推荐 TSynSigner.Pbkdf2 与 Modular Crypt。
文档
mormot.crypt.core
8d60e5ed+7-6
crypt: refined Sha256Weak() documentation
影响
运行时及 API 均无变化。更明确的措辞有助于安全审查将 Sha256Weak 使用识别为兼容性债务,而非推荐的密码派生方案。
值得一看
公开 API
Sha256Weakdeprecated — 文档限定其仅用于 mORMot 1 兼容;新数据应使用 TSynSigner.Pbkdf2 或 Modular Crypt。