use*_*451 10 ruby ruby-on-rails rexml
在今天升级到Ruby-1.9.3-p392之后,REXML在尝试检索特定大小的XML响应时抛出运行时错误 - 一切正常并且在接收25个XML记录时没有引发错误,但是一旦某个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'
Run Code Online (Sandbox Code Playgroud)
我意识到最新的Ruby版本已经改变了:http: //www.ruby-lang.org/en/news/2013/02/22/rexml-dos-2013-02-22/
作为一个快速修复,我已经将大小更改REXML::Document.entity_expansion_text_limit
为更大的数字,错误就消失了.
是否存在风险较低的解决方案?
这听起来像是大量的 XML。您真的需要获得全部吗?也许您可以只从远程服务器请求某些字段?一种选择可能是尝试另一个 XML 解析器(例如Nokogiri )。另一种选择可能是使用 XML 之外的其他内容作为传输(JSON?二进制?)。