summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--lib/rexml/text.rb2
-rw-r--r--test/rexml/test_entity.rb20
3 files changed, 29 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index c2278137be..b7f9c6df2e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Fri Apr 26 23:34:59 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/text.rb (REXML::Text.normalize): Fix a bug that all
+ entity filters are ignored. [ruby-dev:47278] [Bug #8302]
+ Patch by Ippei Obayashi. Thanks!!!
+ * test/rexml/test_entity.rb (EntityTester#test_entity_filter): Add
+ a test of the above change.
+
Fri Apr 26 22:53:55 2013 Kouhei Sutou <kou@cozmixng.org>
* lib/rexml/element.rb (REXML::Attributes#to_a): Support
diff --git a/lib/rexml/text.rb b/lib/rexml/text.rb
index 6624e2a91e..23b17a7608 100644
--- a/lib/rexml/text.rb
+++ b/lib/rexml/text.rb
@@ -368,7 +368,7 @@ module REXML
doctype.entities.each_value do |entity|
copy = copy.gsub( entity.value,
"&#{entity.name};" ) if entity.value and
- not( entity_filter and entity_filter.include?(entity) )
+ not( entity_filter and entity_filter.include?(entity.name) )
end
else
# Replace all ampersands that aren't part of an entity
diff --git a/test/rexml/test_entity.rb b/test/rexml/test_entity.rb
index 5900fac7a8..7b9f39495f 100644
--- a/test/rexml/test_entity.rb
+++ b/test/rexml/test_entity.rb
@@ -164,4 +164,24 @@ class EntityTester < Test::Unit::TestCase
def test_single_pass_unnormalization # ticket 123
assert_equal '&amp;&', REXML::Text::unnormalize('&#38;amp;&amp;')
end
+
+ def test_entity_filter
+ document = REXML::Document.new(<<-XML)
+<!DOCTYPE root [
+<!ENTITY copy "(c)">
+<!ENTITY release-year "2013">
+]>
+<root/>
+XML
+ respect_whitespace = false
+ parent = document.root
+ raw = false
+ entity_filter = ["copy"]
+ assert_equal("(c) &release-year;",
+ REXML::Text.new("(c) 2013",
+ respect_whitespace,
+ parent,
+ raw,
+ entity_filter).to_s)
+ end
end