MuPDF 1.26.4 EPUBレンダリング関数におけるヌルポインタ間接参照
CVE参照 - CVE-2025-55780
影響を受けるバージョン : 1.26.7 およびそれ以前
発見およびテスト環境 : 1.26.4
深刻度 CVSSv3 スコア : 7.5 (High)
Bugzilla : https://bugs.ghostscript.com/show_bug.cgi?id=708720
クラッシュ位置 :-
(1a44.55c0): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
mupdf!break_word_for_overflow_wrap+0x243:
00007ff7`6dbf2a23 8b00 mov eax,dword ptr [rax] ds:00000000`00000000=????????
修正 :- HTMLレイアウトにおけるNULL逆参照を修正しました。
利用可能な幅に収まらないほど大きい単一のフローノードがあり、「overflow-wrap:break-word」CSSスタイルを使用している場合、そのフローノードをより小さな断片に分割して適切に折り返せるようにします。
これは、フローノードのテキストを走査してクラスターに分割することで行われます。シェーピングの問題を避けるため、文字レベルではなくクラスターレベルで分割します。
右から左へのテキストの場合、クラスターは期待とは逆の順序で現れ、既存のロジックが誤動作します。
その結果、分割コードが実際に何も分割せず、node->nextがNULLになり、NULLを逆参照しようとする可能性があります。
修正は、右から左のテキストに対しては異なる方法で分割することです。
この調査中に、harfbuzzの呼び出し方法がクラスターを期待どおりにグループ化していないという追加の問題が見つかりました。そのため、ここでのコードを拡張し、「string_walker」が「character」クラスターモードではなく「grapheme」クラスターモードでharfbuzzを呼び出せるようにしました。
それを使用して、文字列の返された断片を走査し、必要なスペースに対して正しい位置でコードを分割するようにコードを更新し、l2rとr2lの両方のテキストに正しく対応するよう注意を払っています。