0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Re:VIEWでEPUBを生成できない場合の対処

Last updated at Posted at 2025-05-20

Re:VIEWでEPUBを生成できない場合の対処

問題

Re:VIEWでEPUBを生成する際に、以下のエラーが発生していました:

ERROR   entity expansion has grown too large

これは、REXMLライブラリ(Rubyの標準XMLパーサー)のエンティティ展開テキスト制限に関する問題です。デフォルトでは、REXMLはXMLエンティティ展開攻撃を防ぐために、展開されるテキストのサイズに制限を設けています。しかし、大きなドキュメントを処理する場合、この制限が原因でエラーが発生することがあります。

参考

こちらのissueでこちらの問題が議論されていました。
https://github.com/kmuto/review/issues/1929

こちらのプルリクでrubyにentity_expansion_text_limitが導入され、Re:VIEWでエラーがでるようになりました。
https://github.com/ruby/rexml/pull/202

修正手順

  1. プロジェクトのルートディレクトリ(articlesフォルダ)にreview-ext.rbファイルを作成します。

  2. 以下の内容をreview-ext.rbファイルに記述します:

#!/usr/bin/env ruby

# REXMLのエンティティ展開テキスト制限を設定
require 'rexml/document'
REXML::Security.entity_expansion_text_limit = 102400  # 10万に設定

puts "REXML entity expansion text limit set to #{REXML::Security.entity_expansion_text_limit}"
  1. rake epubコマンドを実行して、EPUBを生成します。

解説

  • Re:VIEWはreview-ext.rbファイルが存在する場合、ビルドプロセスで自動的にこのファイルを読み込みます。
  • このファイルでREXMLのエンティティ展開テキスト制限を大きな値(10万)に設定することで、大きなドキュメントでも処理できるようになります。
  • コンソール出力に「REXML entity expansion text limit set to 102400 」と表示されれば、設定が正しく適用されています。

注意点

  • この修正は、XMLエンティティ展開攻撃に対する保護を弱めることになります。しかし、信頼できるコンテンツのみを処理する場合は問題ありません。
  • 値を大きくしすぎると、メモリ使用量が増加する可能性があります。必要に応じて値を調整してください。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?