[#47747] [ruby-trunk - Bug #8995][Open] バイナリデータを文字列として encode! すると readbyte の結果が変化する — "hsbt (Hiroshi SHIBATA)" <shibata.hiroshi@...>

9 messages 2013/10/08

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

From: "hsbt (Hiroshi SHIBATA)" <shibata.hiroshi@...>
Date: 2013-10-30 23:58:16 UTC
List: ruby-dev #47783
Issue #9061 has been updated by hsbt (Hiroshi SHIBATA).

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


----------------------------------------
Bug #9061: REXML::Parsers::UltraLightParser で doctype を含む XML のパースがうまくいかない
https://bugs.ruby-lang.org/issues/9061#change-42669

Author: ohai (Ippei Obayashi)
Status: Open
Priority: Normal
Assignee: kou (Kouhei Sutou)
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" [
  <!ENTITY f "bar">
  <!ENTITY g "baz">
  ]>
  <root />
  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)のように変更するとうまく動くと思います。


-- 
http://bugs.ruby-lang.org/

In This Thread