marked v0.4.0での手書きHTMLパースにおけるバグ

少し前に出たmarkedのv0.4.0では色々と修正が入り、かつ見出しにid属性を振らないオプションが追加された。更新してみたが、結構な感じでバグがある。一番ハマったのがMarkdownファイル内に含まれるHTMLがぶった切られるので、突然p要素が挿入されたりするものだ。同じバグについてのイシューは既に立っていた。

<section>
# Subsection

This is a subsection paragraph.
</section>

v0.3.19ではこのまま出力されるはずだ(sectionタグの間はインラインのレンダラーだけ通される)。しかしv0.4.0ではパーサーが切り出しを間違えるようで、# Subsectionまでとそれ以降が別々にブロックとして処理されてしまう。そのため前者はHTMLとしてそのまま出力されるが、後者がp要素で括られてしまう。

<section>
# Subsection

<p>This is a subsection paragraph.
</section></p>

具体的にはこのような出力になる。完全に壊れている。ワークアラウンドもなさそうなので、僕はバージョンを戻した。Markdownで生HTMLを書くことがある人は更新してはいけない。


markedはv0.4.0で、CommonMark対応と同時に既存のバグも直す、という荒行をやっていたようで、こういったバグもそうだが、細かいところの互換性も失われているようだ。改行の入り方などで微妙な違いを見せていた。古いバージョンとの互換性はともかく、何気なくGitHub Flavored Markdownとの互換性も失われている(フェンス・コードでの最後の改行など)のは影響がそこそこ大きそうだ。