Skip to content

v0.9.6 - Stable

Pre-release
Pre-release

Choose a tag to compare

@jamesgober jamesgober released this 12 May 14:03
· 4 commits to main since this release

Markdown table escape for pipes and newlines

Version 0.9.6 - 2026-05-12

Markdown table hardening surfaced by the post-polish audit pass.
Diff::to_markdown() (under the markdown feature) now escapes
the two characters that previously corrupted the surrounding
|-delimited table layout when they appeared inside a check
name: the pipe itself, and line breaks.

Highlights

  • Diff::to_markdown() escapes | and newlines inside
    check-name cells of the Severity changes and Duration
    regressions
    tables. A check named a|b|c previously
    corrupted the surrounding |-delimited table layout,
    shifting every later column on the row. Newlines inside a
    check name had the same effect — the rendered table would
    break on the embedded line. Both forms are now safe: |
    becomes \|, and \n / \r becomes <br>. The rendered
    cell carries the original text visually intact while the
    table structure stays well-formed.

Breaking changes

None. The fix only affects cells that previously rendered
broken markdown. Any check name that did not contain a |,
\n, or \r produces byte-identical output to 0.9.5.

Internals

  • New helper escape_table_cell() in the markdown module
    centralizes the two substitutions (| -> \|, \n / \r
    -> <br>).
  • New test diff_table_escapes_pipes_in_check_names exercises
    the regression with a check name containing two pipes and
    asserts the rendered table parses as a well-formed markdown
    table.

Notes

  • No new runtime dependencies.
  • No schema changes; schema_version stays at 1.
  • MSRV unchanged at Rust 1.85.
  • Recommended upgrade for anyone rendering diffs through the
    markdown feature whose check names may contain |
    characters (common for parameterized test names) or
    multi-line context.

Full Changelog: v0.9.5...v0.9.6