summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-05-22 09:49:01 +0000
committeryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-05-22 09:49:01 +0000
commitfff99de8326c9f747d66b7236f218b505b324fbd (patch)
treeef3c6dd1f05e3f1ca20b0c8e96b774ec634e3348
parent6285874bc322713fee4bd778d6714f1bf93c559c (diff)
merges r23451 from trunk into ruby_1_9_1.
-- * lib/rss/parser.rb, test/test_parser_1.0.rb: fix foaf:Image element causes parse error even if ignore_unknown_element mode. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@23532 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--lib/rss/0.9.rb3
-rw-r--r--lib/rss/1.0.rb2
-rw-r--r--lib/rss/atom.rb4
-rw-r--r--lib/rss/parser.rb31
-rw-r--r--test/rss/test_parser_1.0.rb16
-rw-r--r--version.h2
7 files changed, 50 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index f9fd30f936..1786716c10 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sat May 16 18:26:42 2009 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/parser.rb, test/test_parser_1.0.rb: fix foaf:Image
+ element causes parse error even if ignore_unknown_element mode.
+
Sat May 16 18:05:07 2009 Kouhei Sutou <kou@cozmixng.org>
* lib/rss/maker/entry.rb: fix a typo.
diff --git a/lib/rss/0.9.rb b/lib/rss/0.9.rb
index 7b24e7596d..6b879d876c 100644
--- a/lib/rss/0.9.rb
+++ b/lib/rss/0.9.rb
@@ -411,8 +411,7 @@ module RSS
module ListenerMixin
private
def initial_start_rss(tag_name, prefix, attrs, ns)
- check_ns(tag_name, prefix, ns, "")
-
+ check_ns(tag_name, prefix, ns, "", false)
@rss = Rss.new(attrs['version'], @version, @encoding, @standalone)
@rss.do_validate = @do_validate
@rss.xml_stylesheets = @xml_stylesheets
diff --git a/lib/rss/1.0.rb b/lib/rss/1.0.rb
index f04e61c5eb..0d1e9fe685 100644
--- a/lib/rss/1.0.rb
+++ b/lib/rss/1.0.rb
@@ -436,7 +436,7 @@ module RSS
module ListenerMixin
private
def initial_start_RDF(tag_name, prefix, attrs, ns)
- check_ns(tag_name, prefix, ns, RDF::URI)
+ check_ns(tag_name, prefix, ns, RDF::URI, false)
@rss = RDF.new(@version, @encoding, @standalone)
@rss.do_validate = @do_validate
diff --git a/lib/rss/atom.rb b/lib/rss/atom.rb
index 10282a8743..ff8ff2249a 100644
--- a/lib/rss/atom.rb
+++ b/lib/rss/atom.rb
@@ -716,7 +716,7 @@ module RSS
module ListenerMixin
private
def initial_start_feed(tag_name, prefix, attrs, ns)
- check_ns(tag_name, prefix, ns, Atom::URI)
+ check_ns(tag_name, prefix, ns, Atom::URI, false)
@rss = Atom::Feed.new(@version, @encoding, @standalone)
@rss.do_validate = @do_validate
@@ -731,7 +731,7 @@ module RSS
end
def initial_start_entry(tag_name, prefix, attrs, ns)
- check_ns(tag_name, prefix, ns, Atom::URI)
+ check_ns(tag_name, prefix, ns, Atom::URI, false)
@rss = Atom::Entry.new(@version, @encoding, @standalone)
@rss.do_validate = @do_validate
diff --git a/lib/rss/parser.rb b/lib/rss/parser.rb
index 9b28f0fa8a..359c01419e 100644
--- a/lib/rss/parser.rb
+++ b/lib/rss/parser.rb
@@ -392,7 +392,7 @@ module RSS
start_have_something_element(local, prefix, attrs, ns, next_class)
else
if !@do_validate or @ignore_unknown_element
- @proc_stack.push(nil)
+ @proc_stack.push(setup_next_element_in_unknown_element)
else
parent = "ROOT ELEMENT???"
if current_class.tag_name
@@ -423,13 +423,22 @@ module RSS
[$1 || '', $2]
end
- def check_ns(tag_name, prefix, ns, require_uri)
- unless _ns(ns, prefix) == require_uri
- if @do_validate
+ def check_ns(tag_name, prefix, ns, require_uri, ignore_unknown_element=nil)
+ if _ns(ns, prefix) == require_uri
+ true
+ else
+ if ignore_unknown_element.nil?
+ ignore_unknown_element = @ignore_unknown_element
+ end
+
+ if ignore_unknown_element
+ false
+ elsif @do_validate
raise NSError.new(tag_name, prefix, require_uri)
else
# Force bind required URI with prefix
@ns_stack.last[prefix] = require_uri
+ true
end
end
end
@@ -456,9 +465,12 @@ module RSS
end
def start_have_something_element(tag_name, prefix, attrs, ns, klass)
- check_ns(tag_name, prefix, ns, klass.required_uri)
- attributes = collect_attributes(tag_name, prefix, attrs, ns, klass)
- @proc_stack.push(setup_next_element(tag_name, klass, attributes))
+ if check_ns(tag_name, prefix, ns, klass.required_uri)
+ attributes = collect_attributes(tag_name, prefix, attrs, ns, klass)
+ @proc_stack.push(setup_next_element(tag_name, klass, attributes))
+ else
+ @proc_stack.push(setup_next_element_in_unknown_element)
+ end
end
def collect_attributes(tag_name, prefix, attrs, ns, klass)
@@ -525,6 +537,11 @@ module RSS
@last_element = previous
end
end
+
+ def setup_next_element_in_unknown_element
+ current_element, @last_element = @last_element, nil
+ Proc.new {@last_element = current_element}
+ end
end
unless const_defined? :AVAILABLE_PARSER_LIBRARIES
diff --git a/test/rss/test_parser_1.0.rb b/test/rss/test_parser_1.0.rb
index 216881b767..fc8f7dc08c 100644
--- a/test/rss/test_parser_1.0.rb
+++ b/test/rss/test_parser_1.0.rb
@@ -507,6 +507,22 @@ EOR
#{make_image}
EOR
end
+
+ def test_unknown_case_insensitive_duplicated_element
+ xmlns = {
+ "foaf" => "http://xmlns.com/foaf/0.1/",
+ "dc" => "http://purl.org/dc/elements/1.1/",
+ }
+ assert_parse(make_RDF(<<-EOR, xmlns), :nothing_raised)
+ #{make_channel}
+ #{make_item}
+ #{make_image}
+ <foaf:Image rdf:about="http://example.com/myself.png">
+ <dc:title>Myself</dc:title>
+ <dc:link>http://example.com/</dc:link>
+ </foaf:Image>
+ EOR
+ end
end
end
diff --git a/version.h b/version.h
index 55288ef276..26f8dd1827 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
#define RUBY_VERSION "1.9.1"
#define RUBY_RELEASE_DATE "2009-05-12"
-#define RUBY_PATCHLEVEL 146
+#define RUBY_PATCHLEVEL 147
#define RUBY_VERSION_MAJOR 1
#define RUBY_VERSION_MINOR 9
#define RUBY_VERSION_TEENY 1