1 # Fixes the rexml vulnerability disclosed at:
2 # http://www.ruby-lang.org/en/news/2008/08/23/dos-vulnerability-in-rexml/
3 # This fix is identical to rexml-expansion-fix version 1.0.1
6 # Earlier versions of rexml defined REXML::Version, newer ones REXML::VERSION
7 unless (defined?(REXML
::VERSION) ? REXML
::VERSION : REXML
::Version) > "3.1.7.2"
8 require 'rexml/document'
10 # REXML in 1.8.7 has the patch but didn't update Version from 3.1.7.2.
11 unless REXML
::Document.respond_to
?(:entity_expansion_limit=)
12 require 'rexml/entity'
16 undef_method
:unnormalized
18 document
.record_entity_expansion
! if document
21 @unnormalized = Text
::unnormalize(v
, parent
)
25 class Document
< Element
26 @
@entity_expansion_limit = 10_000
27 def self.entity_expansion_limit
= val
28 @
@entity_expansion_limit = val
31 def record_entity_expansion
!
32 @number_of_expansions ||= 0
33 @number_of_expansions += 1
34 if @number_of_expansions > @
@entity_expansion_limit
35 raise "Number of entity expansions exceeded, processing aborted."