11

今日 Ruby-1.9.3-p392 にアップグレードした後、REXML は特定のサイズを超える XML 応答を取得しようとするとランタイム エラーをスローします。長さのしきい値に達すると、次のエラーが発生します。

Error occurred while parsing request parameters.
Contents:

RuntimeError (entity expansion has grown too large):
  /.rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/rexml/text.rb:387:in `block in unnormalize'

これは最新の Ruby バージョンで変更されたことに気付きました: http://www.ruby-lang.org/en/news/2013/02/22/rexml-dos-2013-02-22/

簡単な修正として、サイズをREXML::Document.entity_expansion_text_limitより大きな数値に変更したところ、エラーはなくなりました。

リスクの少ない解決策はありますか?

4

2 に答える 2

0

それは大量の XML のように思えます。あなたは本当にそれをすべて手に入れる必要がありますか?リモートサーバーから特定のフィールドをリクエストすることはできますか? 1 つのオプションとして、別の XML パーサー (たとえば、Nokogiri ) を試すことが考えられます。XML 以外のものをトランスポートとして使用する別のオプション (JSON? バイナリ?)。

于 2013-06-11T02:03:20.153 に答える