[ruby-trunk - Bug #9061][Open] REXML::Parsers::UltraLightParser で doctype を含む XML のパースがうまくいかない

Issue #9061 has been reported by ohai (Ippei Obayashi).


Bug #9061: REXML::Parsers::UltraLightParser で doctype を含む XML
のパースがうまくいかない

Author: ohai (Ippei Obayashi)
Status: Open
Priority: Normal
Assignee:
Category: lib
Target version:
ruby -v: ruby 2.1.0dev (2013-10-29 trunk 43466) [x86_64-linux]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN

以下のコード (test_ulp.rb)
require ‘rexml/parsers/ultralightparser’
require ‘pp’

pp REXML::Parsers::UltraLightParser.new(<<XML).parse

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE root SYSTEM "foo" [

]>

XML
を動かすと、期待される出力は
[[:xmldecl, “1.0”, “UTF-8”, nil],
[:text, “\n”],
[:doctype,
[…],
“root”,
“SYSTEM”,
“foo”,
nil,
[:entitydecl, “f”, “bar”],
[:entitydecl, “g”, “baz”]],
[:text, “\n”],
[:start_element, […], “root”, {}],
[:text, “\n”]]
のようなものですが、実際には
[[:xmldecl, “1.0”, “UTF-8”, nil],
[:text,
“\n”,
[:text, “\n”],
[:start_element, […], “root”, {}],
[:text, “\n”]],
[:start_doctype, “root”, “SYSTEM”, “foo”, nil],
[:entitydecl, “f”, “bar”],
[:entitydecl, “g”, “baz”]]
のようなものが出力されます。この出力は木構造上の :start_element
や :start_doctype の位置が期待される場所と異なります。
この挙動は ruby 2.1.0dev (2013-10-29 trunk 43466) [x86_64-linux] および
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] で確認しました。

添付したパッチ(rexml-ultralightparser.patch)のように変更するとうまく動くと思います。

Issue #9061 has been updated by hsbt (Hiroshi SHIBATA).

Assignee set to kou (Kouhei S.)
Target version set to current: 2.1.0


Bug #9061: REXML::Parsers::UltraLightParser で doctype を含む XML
のパースがうまくいかない

Author: ohai (Ippei Obayashi)
Status: Open
Priority: Normal
Assignee: kou (Kouhei S.)
Category: lib
Target version: current: 2.1.0
ruby -v: ruby 2.1.0dev (2013-10-29 trunk 43466) [x86_64-linux]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN

以下のコード (test_ulp.rb)
require ‘rexml/parsers/ultralightparser’
require ‘pp’

pp REXML::Parsers::UltraLightParser.new(<<XML).parse

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE root SYSTEM "foo" [

]>

XML
を動かすと、期待される出力は
[[:xmldecl, “1.0”, “UTF-8”, nil],
[:text, “\n”],
[:doctype,
[…],
“root”,
“SYSTEM”,
“foo”,
nil,
[:entitydecl, “f”, “bar”],
[:entitydecl, “g”, “baz”]],
[:text, “\n”],
[:start_element, […], “root”, {}],
[:text, “\n”]]
のようなものですが、実際には
[[:xmldecl, “1.0”, “UTF-8”, nil],
[:text,
“\n”,
[:text, “\n”],
[:start_element, […], “root”, {}],
[:text, “\n”]],
[:start_doctype, “root”, “SYSTEM”, “foo”, nil],
[:entitydecl, “f”, “bar”],
[:entitydecl, “g”, “baz”]]
のようなものが出力されます。この出力は木構造上の :start_element
や :start_doctype の位置が期待される場所と異なります。
この挙動は ruby 2.1.0dev (2013-10-29 trunk 43466) [x86_64-linux] および
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] で確認しました。

添付したパッチ(rexml-ultralightparser.patch)のように変更するとうまく動くと思います。

Issue #9061 has been updated by kou (Kouhei S.).

遅くなりましたがテストを追加してパッチをそのまま取り込みました!
報告ありがとうございました!

Bug #9061: REXML::Parsers::UltraLightParser で doctype を含む XML
のパースがうまくいかない

Author: ohai (Ippei Obayashi)
Status: Closed
Priority: Normal
Assignee: kou (Kouhei S.)
Category: lib
Target version: current: 2.1.0
ruby -v: ruby 2.1.0dev (2013-10-29 trunk 43466) [x86_64-linux]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN

以下のコード (test_ulp.rb)
require ‘rexml/parsers/ultralightparser’
require ‘pp’

pp REXML::Parsers::UltraLightParser.new(<<XML).parse

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE root SYSTEM "foo" [

]>

XML
を動かすと、期待される出力は
[[:xmldecl, “1.0”, “UTF-8”, nil],
[:text, “\n”],
[:doctype,
[…],
“root”,
“SYSTEM”,
“foo”,
nil,
[:entitydecl, “f”, “bar”],
[:entitydecl, “g”, “baz”]],
[:text, “\n”],
[:start_element, […], “root”, {}],
[:text, “\n”]]
のようなものですが、実際には
[[:xmldecl, “1.0”, “UTF-8”, nil],
[:text,
“\n”,
[:text, “\n”],
[:start_element, […], “root”, {}],
[:text, “\n”]],
[:start_doctype, “root”, “SYSTEM”, “foo”, nil],
[:entitydecl, “f”, “bar”],
[:entitydecl, “g”, “baz”]]
のようなものが出力されます。この出力は木構造上の :start_element
や :start_doctype の位置が期待される場所と異なります。
この挙動は ruby 2.1.0dev (2013-10-29 trunk 43466) [x86_64-linux] および
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] で確認しました。

添付したパッチ(rexml-ultralightparser.patch)のように変更するとうまく動くと思います。