From f85caf40a69d322bde80a547e4b17568604746ff Mon Sep 17 00:00:00 2001 From: ujihisa Date: Thu, 21 Feb 2019 17:42:08 +0900 Subject: [ruby/rexml] Message less confusing error to human (#16) * Message less confusing error to human * Problem: Following error message is not helpful, because you have to reason that '' actually means it's in the top-level, and the 'div' (not '') is an end tag require "rexml/parsers/lightparser" REXML::Parsers::LightParser.new('').parse #=> Missing end tag for '' (got 'div') * Solution: add a special case in error handling just to change the error message require "rexml/parsers/lightparser" REXML::Parsers::LightParser.new('').parse #=> Unexpected top-level end tag (got 'div') * Refactor by removing unnecessary `md` check * Thanks @a_matsuda to review this at asakusa.rb! https://github.com/ruby/rexml/commit/f6528d4477 --- lib/rexml/parsers/baseparser.rb | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'lib/rexml') diff --git a/lib/rexml/parsers/baseparser.rb b/lib/rexml/parsers/baseparser.rb index 39e9ec3fb1..f76aed0787 100644 --- a/lib/rexml/parsers/baseparser.rb +++ b/lib/rexml/parsers/baseparser.rb @@ -335,6 +335,10 @@ module REXML @nsstack.shift last_tag = @tags.pop md = @source.match( CLOSE_MATCH, true ) + if md and !last_tag + message = "Unexpected top-level end tag (got '#{md[1]}')" + raise REXML::ParseException.new(message, @source) + end if md.nil? or last_tag != md[1] message = "Missing end tag for '#{last_tag}'" message << " (got '#{md[1]}')" if md -- cgit v1.2.3