<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Fri, 02 Oct 2026 15:44:00 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-53530</title>
      <link>https://vulnerability.circl.lu/vuln/fkie_cve-2026-53530</link>
      <description>&lt;p&gt;RaTeX is a KaTeX-compatible math rendering engine written in Rust. Prior to version 0.1.11, the public parser entrypoint `ratex_parser::parse(&amp;amp;str)` panics on the 9-byte input `\verbéxé` (i.e. `\verb` followed by the non-ASCII delimiter `é`). When handling a `\verb` command, the parser slices the verbatim argument with byte indices (`arg[1..arg.len() - 1]`); if the delimiter character is multibyte UTF-8, index `1` lands inside that character and Rust panics with *“byte index 1 is not a char boundary”*. Because RaTeX’s release profile sets `panic = &amp;#34;abort&amp;#34;` (`Cargo.toml:48`), the panic aborts the entire process — not just the current request/thread — making this a hard denial of service for any service that renders untrusted LaTeX. Version 0.1.11 fixes the issue.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;RaTeX is a KaTeX-compatible math rendering engine written in Rust. Prior to version 0.1.11, the public parser entrypoint `ratex_parser::parse(&amp;amp;str)` panics on the 9-byte input `\verbéxé` (i.e. `\verb` followed by the non-ASCII delimiter `é`). When handling a `\verb` command, the parser slices the verbatim argument with byte indices (`arg[1..arg.len() - 1]`); if the delimiter character is multibyte UTF-8, index `1` lands inside that character and Rust panics with *“byte index 1 is not a char boundary”*. Because RaTeX’s release profile sets `panic = &amp;#34;abort&amp;#34;` (`Cargo.toml:48`), the panic aborts the entire process — not just the current request/thread — making this a hard denial of service for any service that renders untrusted LaTeX. Version 0.1.11 fixes the issue.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/fkie_cve-2026-53530</guid>
    </item>
    <item>
      <title>GHSA-4hgp-59h5-gvrj — ratex-parser panics on `\verb` with a multibyte delimiter (UTF-8 byte-boundary slice)</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-4hgp-59h5-gvrj</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; crates.io: ratex-parser&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;The public parser entrypoint `ratex_parser::parse(&amp;amp;str)` panics on the **9-byte** input `\verbéxé` (i.e. `\verb` followed by the non-ASCII delimiter `é`). When handling a `\verb` command, the parser slices the verbatim argument with **byte** indices (`arg[1..arg.len() - 1]`); if the delimiter character is multibyte UTF-8, index `1` lands inside that character and Rust panics with *“byte index 1 is not a char boundary”*. Because RaTeX’s release profile sets `panic = &amp;#34;abort&amp;#34;` (`Cargo.toml:48`), the panic aborts the **entire process** — not just the current request/thread — making this a hard denial of service for any service that renders untrusted LaTeX.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;## Affected code&lt;/p&gt;
&lt;p&gt;`crates/ratex-parser/src/parser.rs`, `parse_symbol_inner`:&lt;/p&gt;
&lt;p&gt;```rust
if let Some(stripped) = text.strip_prefix(&amp;#34;\\verb&amp;#34;) {       // parser.rs:901
    self.consume();
    let arg = stripped.to_string();                         // e.g. &amp;#34;éxé&amp;#34;
    let star = arg.starts_with(&amp;#39;*&amp;#39;);
    let arg = if star { &amp;amp;arg[1..] } else { &amp;amp;arg };          // parser.rs:905  (also byte-sliced)
    if arg.len() &amp;lt; 2 {                                      // byte length
        return Err(ParseError::new(&amp;#34;\\verb assertion failed&amp;#34;, Some(&amp;amp;nucleus)));
    }
    let body = arg[1..arg.len() - 1].to_string();           // parser.rs:910  &amp;lt;-- PANIC on multibyte delimiter
    ...
}
```&lt;/p&gt;
&lt;p&gt;For input `\verbéxé`: `arg = &amp;#34;éxé&amp;#34;`, where `é` = `U+00E9` (bytes `C3 A9`). `arg.len()` is the **byte** length (5), the `&amp;lt; 2` guard…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; crates.io: ratex-parser&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;The public parser entrypoint `ratex_parser::parse(&amp;amp;str)` panics on the **9-byte** input `\verbéxé` (i.e. `\verb` followed by the non-ASCII delimiter `é`). When handling a `\verb` command, the parser slices the verbatim argument with **byte** indices (`arg[1..arg.len() - 1]`); if the delimiter character is multibyte UTF-8, index `1` lands inside that character and Rust panics with *“byte index 1 is not a char boundary”*. Because RaTeX’s release profile sets `panic = &amp;#34;abort&amp;#34;` (`Cargo.toml:48`), the panic aborts the **entire process** — not just the current request/thread — making this a hard denial of service for any service that renders untrusted LaTeX.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;## Affected code&lt;/p&gt;
&lt;p&gt;`crates/ratex-parser/src/parser.rs`, `parse_symbol_inner`:&lt;/p&gt;
&lt;p&gt;```rust
if let Some(stripped) = text.strip_prefix(&amp;#34;\\verb&amp;#34;) {       // parser.rs:901
    self.consume();
    let arg = stripped.to_string();                         // e.g. &amp;#34;éxé&amp;#34;
    let star = arg.starts_with(&amp;#39;*&amp;#39;);
    let arg = if star { &amp;amp;arg[1..] } else { &amp;amp;arg };          // parser.rs:905  (also byte-sliced)
    if arg.len() &amp;lt; 2 {                                      // byte length
        return Err(ParseError::new(&amp;#34;\\verb assertion failed&amp;#34;, Some(&amp;amp;nucleus)));
    }
    let body = arg[1..arg.len() - 1].to_string();           // parser.rs:910  &amp;lt;-- PANIC on multibyte delimiter
    ...
}
```&lt;/p&gt;
&lt;p&gt;For input `\verbéxé`: `arg = &amp;#34;éxé&amp;#34;`, where `é` = `U+00E9` (bytes `C3 A9`). `arg.len()` is the **byte** length (5), the `&amp;lt; 2` guard…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-4hgp-59h5-gvrj</guid>
    </item>
  </channel>
</rss>
