のパース対象文字列をバッファに毎 回追記しパースしていたが、StringScannerのバッファサイズの上限 (2GB)を超えた。 バッファが一定サイズ以上になった時点でバッファをクリアする 形で対処 rexml#154: Fix a bug that a large XML can’t be parsed
nil, "root", "root", {}] [:characters, "a\n"] [:end_element, nil, "root", "root"] [:characters, "\n"] ☜ 終了タグ後に改行コードが応答。 [:end_document] rexml#167 : Do not output :text event after the root tag is closed で終了 タグ後のテキストイベント出力を停止するように修正
"&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;"> <!ENTITY b "&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;"> <!ENTITY c "xxxxx"> ]><root>&a;</root> #=> xxxxxxxxxxxxxxxxxxxxxxxxxxxxx... REXML におけるエンティティ展開に伴うサービス不能攻撃について (CVE-2013-1821) ユーザー定義実体参照の展開回数・サイズの上限を決めて超えた 場合はエラーとする対処。 DOMパーサーのみの対応だった。 CVE-2024-41946: DoS vulnerability in REXML で報告 rexml#187: Add support for XML entity expansion limitation in SAX and pull parsersで修正
& 修正済 rexml#167: Do not output :text event after the root tag is closed (終了タ グ後のテキストイベント出力) rexml#168: Fix a bug that SAX2 parser doesn’t expand the predefined entities for “characters”(SAX2: 定義済み実体参照が展開されない) CVE-2024-41946: DoS vulnerability in REXML rexml#187: Add support for XML entity expansion limitation in SAX and pull parsers (SAX2/Pull: エンティティ展開に伴うサービス不能 攻撃)
2. 今後の性能改善 (rexml 3.2.8 での性能劣化対策) StringScanner#scan_until(pattern) pattern に正規表現だけでなく、文字列 を指定可能にして高速化 したい。(CRuby と JRuby 環境で対処が必要) ※ StringScanner#scan(pattern) は、 pattern に正規表現と文字列 が指定可能 strscan#4: Accept String as a pattern It shows String as a pattern is 1.25x faster than Regexp as a pattern. 3.