From 80cb3351ddcfabf7ba470a098f692c378456854d Mon Sep 17 00:00:00 2001 From: kou Date: Sat, 11 Jun 2011 07:05:42 +0000 Subject: [PATCH] * lib/rexml/parsers/xpathparser.rb (REXML::Parsers::XPathParser#parse), test/rexml/test_elements.rb (ElementsTester::test_each_with_frozen_condition): don't modify original XPath. fixes #4164 Reported by Pavel Shved. Thanks!!! git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31995 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 9 +++++++++ lib/rexml/parsers/xpathparser.rb | 3 ++- test/rexml/test_elements.rb | 9 +++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 1407d0e3bd..9f822714f3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Sat Jun 11 16:04:03 2011 Kouhei Sutou + + * lib/rexml/parsers/xpathparser.rb + (REXML::Parsers::XPathParser#parse), + test/rexml/test_elements.rb + (ElementsTester::test_each_with_frozen_condition): + don't modify original XPath. fixes #4164 + Reported by Pavel Shved. Thanks!!! + Sat Jun 11 15:53:27 2011 Kouhei Sutou * test/rexml/test_elements.rb (ElementsTester): remove needless diff --git a/lib/rexml/parsers/xpathparser.rb b/lib/rexml/parsers/xpathparser.rb index 780e312671..e643d11511 100644 --- a/lib/rexml/parsers/xpathparser.rb +++ b/lib/rexml/parsers/xpathparser.rb @@ -17,8 +17,9 @@ module REXML end def parse path + path = path.dup path.gsub!(/([\(\[])\s+/, '\1') # Strip ignorable spaces - path.gsub!( /\s+([\]\)])/, '\1' ) + path.gsub!( /\s+([\]\)])/, '\1') parsed = [] path = OrExpr(path, parsed) parsed diff --git a/test/rexml/test_elements.rb b/test/rexml/test_elements.rb index b7c7c267ed..e5e209ecdc 100644 --- a/test/rexml/test_elements.rb +++ b/test/rexml/test_elements.rb @@ -84,6 +84,15 @@ class ElementsTester < Test::Unit::TestCase assert_equal 7, count end + def test_each_with_frozen_condition + doc = Document.new('') + names = [] + doc.root.elements.each('book'.freeze) do |element| + names << element.attributes["name"] + end + assert_equal(["Ruby", "XML"], names) + end + def test_to_a doc = Document.new 'seanelliott' assert_equal 2, doc.root.elements.to_a.size