diff options
author | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-08-11 09:41:29 +0000 |
---|---|---|
committer | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-08-11 09:41:29 +0000 |
commit | 7e0022bc8e89cd125f5fe97bc81a169d72d912e9 (patch) | |
tree | e0cfeab987e7ba99ecfcd7e05c23183f96b79305 /lib/rexml | |
parent | e0fff0d2b83a326363347b2eb508a4e0ae8a4683 (diff) | |
download | ruby-7e0022bc8e89cd125f5fe97bc81a169d72d912e9.tar.gz |
* lib/rexml/parsers/sax2parser.rb (REXML::Parsers::SAX2Parser#parse):
Fix wrong "%" position in parameter entity declaration event argument.
* test/rexml/parser/test_sax2.rb: Add tests for the above case.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42518 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rexml')
-rw-r--r-- | lib/rexml/parsers/sax2parser.rb | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/lib/rexml/parsers/sax2parser.rb b/lib/rexml/parsers/sax2parser.rb index 4a95bc6fff..5e0f0fbf95 100644 --- a/lib/rexml/parsers/sax2parser.rb +++ b/lib/rexml/parsers/sax2parser.rb @@ -177,12 +177,28 @@ module REXML handle( :characters, copy ) when :entitydecl @entities[ event[1] ] = event[2] if event.size == 3 + parameter_reference_p = false case event[2] when "SYSTEM" - event[4, 0] = "NDATA" if event.size == 5 + if event.size == 5 + if event.last == "%" + parameter_reference_p = true + else + event[4, 0] = "NDATA" + end + end when "PUBLIC" - event[5, 0] = "NDATA" if event.size == 6 + if event.size == 6 + if event.last == "%" + parameter_reference_p = true + else + event[5, 0] = "NDATA" + end + end + else + parameter_reference_p = (event.size == 4) end + event[1, 0] = event.pop if parameter_reference_p handle( event[0], event[1..-1] ) when :processing_instruction, :comment, :attlistdecl, :elementdecl, :cdata, :notationdecl, :xmldecl |