Skip to content

Releases: easy-4-rust/thymeleaf-rust

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 17 Sep 16:15

Release Notes

完整变更日志见 CHANGELOG.md。

Highlights

[0.1.0] - 2026-09-17

首个稳定版。相对 0.1.0-beta.2 仅一处鲁棒性修复;完整演进见
beta.0 / beta.1 / beta.2 条目。自本版本起按 SemVer 承诺演化
(晋级规则见 docs/superpowers/specs/2026-07-28-versioning-governance.md)。

Fixed

  • 退化 HTML 注释(<!-->/<!--->)反转内容区间导致渲染 panic
    (render_html cargo-fuzz crash 实证,6 字节触发输入 <<!-->):
    HTML 注释路径 content_end 钳到 content_start,与 XML 路径既有护栏
    同款;此类注释按 HTML5 语义输出空内容
  • CDATA/注释 closer 缺失且尾部为多字节字符时,无条件 end-3 切进
    UTF-8 序列中间导致渲染 panic(同 fuzz 目标第二轮实证,触发输入
    <![CDATA[&z\u{C6}\x01]):HTML/XML 的 CDATA 与 XML 注释路径改为
    closer 仅在真实存在时剔除,content_start 钳制到 char boundary
  • 退化闭合标签(</H</>)名称终点越过内容终点导致渲染 panic(第三轮
    fuzz 实证):事件适配器 TemplateHandlerAdapterMarkupHandler 作为
    全部 parser 事件切片的唯一汇聚点,统一做 char boundary 钳制与区间
    排序恢复,结构性杜绝 parser 侧偏移缺陷引发渲染 panic(合法流恒等,
    语料 parity 不变)

[0.1.0-beta.2] - 2026-09-17

v0.1.0-beta.2

v0.1.0-beta.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 17 Sep 16:15

Release Notes

完整变更日志见 CHANGELOG.md。

Highlights

[0.1.0-beta.2] - 2026-09-17

本版本相对 0.1.0-beta.1:适配器依赖刷新 + thymeleaf-topcoat MSRV
如实声明
。核心 crate thymeleaf 源码零变更,随 workspace 版本
步进发布。

Changed

  • 适配器依赖刷新 3 项(Dependabot #15/#16/#17):tonic
    =0.12.3→=0.14.6、sa-token-core 0.1.18→0.2.0、topcoat
    =0.6.2→=0.8.0,适配器测试全绿
  • thymeleaf-topcoat 显式声明 rust-version = "1.98":topcoat 0.7.0
    起全线要求 rustc 1.98(0.6.2 及以前为 1.95),显式覆盖 workspace
    继承使 manifest 与事实一致;该 crate 暂未发布 crates.io,声明于
    后续发布时生效

[0.1.0-beta.1] - 2026-09-03

v0.1.0-beta.1

v0.1.0-beta.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 04 Sep 04:37

Release Notes

完整变更日志见 CHANGELOG.md。

Highlights

[0.1.0-beta.1] - 2026-09-03

本版本相对 0.1.0-beta.0:可选 DTD 验证(以 Java 实现版本化 DTD 集
为准)+ 依赖刷新 + 健壮性修复
。

Added

  • 可选 DTD 验证(dtd-validation feature gate,XML 模式):新增
    thymeleaf::dtd 模块。DTD 约束集以 Java 实现为准——内嵌
    Thymeleaf 2.1.6 jar org/thymeleaf/dtd/ 官方版本化集合(58 文件):
    • Thymeleaf 命名空间 16 个 SYSTEM ID(xhtml1
      strict/transitional/frameset + xhtml11 × thymeleaf-1..4,与
      StandardTranslationDocTypeProcessor 翻译表一一对应,自包含单体)
    • transitional 历史拼写别名 4(文件头自引用 transitonal)
    • W3C 命名空间 4 个标准 URL(xhtml11 为 jar 自包含单体,离线可解析)
    • 模块/实体 URL→本地文件映射(modularization 24 + ruby 1 + .ent 3
      • xhtml11-model 1)与裸文件名 42——完全离线
  • 配置面:TemplateEngine::set_dtd_validation_policy +
    IEngineConfiguration::get_dtd_validation_policy,三策略
    Disabled(默认,零开销零行为影响)/Warn(验证但不拒绝)/
    Strict(违反即 TemplateParserError)。DOCTYPE 缺失或含内部子集
    时跳过验证;DOCTYPE 无法解析时 Strict 失败关闭、Warn 降级
  • dtd-files/thymeleaf-2.1.6/ jar 镜像布局 + 58 文件 SHA-256 台账
    (dtd_file_integrity 逐字节比对 + .gitattributes 行尾冻结)

Changed

  • 实体展开预算放宽至库默认档(10,000 次/10MiB):1,000 次预算实测
    误杀 xhtml11 完整展开;预算仅作用于内嵌可信文件集,防炸弹属性保留
  • 依赖刷新 14 项(含 quick-xml 0.42、unicode-general-category 1.1、
    sha2 0.11、actix-web 4.15 / salvo 0.96 / ntex 3.12 等适配器升级)

Fixed

  • safe_range 反转区间 panic(html_parser_never_panics proptest
    随机命中:start>end 时字节切片越界,clamp 后取 max 兜底)
  • Release 工作流 push main 误触发 Validate Tag(收敛为 tag-only +
    workflow_dispatch);全部 rust-toolchain 步骤补必填 toolchain 输入
  • h2 0.4.15→0.4.19(RUSTSEC-2026-0258);依赖刷新涉及的金标
    (letter_ranges)与本地 parity 清单同步

Verification

  • workspace --all-features:1,554 passed / 0 failed;默认 feature
    1,531 passed / 0 failed;fmt / clippy(all-features all-targets)零警告
  • DTD:16 版本 ID + 4 拼写别名 + 4 W3C URL 全部可构建验证器;
    xhtml11 文档 Strict 端到端通过;dtd 模块行覆盖 100%(cargo-llvm-cov)
  • 双分支 CI 全绿(CI 14m23s / Coverage / SemVer / Security Audit /
    bench-regression)

[0.1.0-beta.0] - 2026-09-03

v0.1.0-beta.0

v0.1.0-beta.0 Pre-release
Pre-release

Choose a tag to compare

@loong10k loong10k released this 02 Sep 20:48

Release Notes

完整变更日志见 CHANGELOG.md。

Highlights

[0.1.0-beta.0] - 2026-09-03

本版本相对 0.1.0-alpha.1:文档↔代码核对收口 + 性能基线 + 覆盖率体系 +
VALUE_ADD 97 测试 + web 桥接域交付
。alpha→beta 八门禁全绿
(VERSION-PLAN §4.1),本版起进入 beta 通道。

Added

  • VALUE_ADD 测试批(97 例):方言装饰契约(processor_configuration_utils 11)、
    数字格式边界(number_utils 26)、string_utils 分支(23)、资源加载工具(12)、
    web 渲染路径(thymeleaf_renderer 9)、WebExchange 参数契约(i_web_request 16)
    ——归因结论:Java 侧均无独立测试类,全部为缺口导向的合规 VALUE_ADD
  • criterion 性能基线(benches/render_baseline.rs 三基准 +
    docs/release/benchmarks.md drift gate):单变量插值 10.18µs /
    th:each×100 145µs / 混合文档 225.5µs
  • 覆盖率体系:coverage-baseline(79.89%→80.20% 行,--all-features)
    • coverage-gap-attribution(337 文件归因 + Top12 分类 + 5 批排期)
  • 安全模型文档(docs/release/security.md):零 unsafe 实测 /
    表达式 ACL 禁止类型表 + 静态方法白名单 / deny 策略 / proptest fuzz 基线
  • web 桥接域(8-15 计划线):topcoat P0 四件套、actix HostWeb 契约、
    vernal ThymeleafViewResolver(Spring MVC 视图解析桥)
  • OGNL 求值器 V3 golden 差分(46 case 端到端矩阵)

Changed

  • alpha→beta 门禁全表落定(VERSION-PLAN §4.1):security.md 补建(修正虚标)、
    cargo package --verify 通过、S11 状态更正为完成
  • CI:concurrency cancel-in-progress(同分支新推送取消旧排队 run)

Fixed

  • 内部 Elvis 语义偏差(${a ?: b} 对齐 Java OGNL 行为)
  • 表达式求值器若干 parity 修正(随 golden 差分)

Verification

  • workspace --all-features:1,534 passed / 0 failed
  • corpus semantic_all:2/2 批次(2,595 .thtest)
  • 布局审计(CI 口径):strict_blockers=0(113 豁免登记)
  • cargo package -p thymeleaf 演练通过

[Unreleased]