mirror of
https://github.com/ruby/ruby.git
synced 2025-09-19 02:23:59 +02:00
merge revision(s) 59033,59034: [Backport #13636]
rexml: add close tag check on end of document to StreamParser [ruby-core:81593] [Bug #13636] Reported by Anton Sivakov. Thanks!!! * properties. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@59399 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
acfaa3311c
commit
3fd2cbecff
3 changed files with 41 additions and 1 deletions
|
@ -7,6 +7,7 @@ module REXML
|
|||
def initialize source, listener
|
||||
@listener = listener
|
||||
@parser = BaseParser.new( source )
|
||||
@tag_stack = []
|
||||
end
|
||||
|
||||
def add_listener( listener )
|
||||
|
@ -19,14 +20,21 @@ module REXML
|
|||
event = @parser.pull
|
||||
case event[0]
|
||||
when :end_document
|
||||
unless @tag_stack.empty?
|
||||
tag_path = "/" + @tag_stack.join("/")
|
||||
raise ParseException.new("Missing end tag for '#{tag_path}'",
|
||||
@parser.source)
|
||||
end
|
||||
return
|
||||
when :start_element
|
||||
@tag_stack << event[1]
|
||||
attrs = event[2].each do |n, v|
|
||||
event[2][n] = @parser.unnormalize( v )
|
||||
end
|
||||
@listener.tag_start( event[1], attrs )
|
||||
when :end_element
|
||||
@listener.tag_end( event[1] )
|
||||
@tag_stack.pop
|
||||
when :text
|
||||
normalized = @parser.unnormalize( event[1] )
|
||||
@listener.text( normalized )
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue