ruby-dev (Japanese) list archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-dev:47482] [ruby-trunk - Bug #8602][Open] REXML::Element#add_text and REXML::Text#<<
@ 2013-07-04 18:36 ohai (Ippei Obayashi)
  2013-07-07  2:53 ` [ruby-dev:47487] [ruby-trunk - Bug #8602] " kou (Kouhei Sutou)
  0 siblings, 1 reply; 2+ messages in thread
From: ohai (Ippei Obayashi) @ 2013-07-04 18:36 UTC (permalink / raw
  To: ruby developers list


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

----------------------------------------
Bug #8602: REXML::Element#add_text and REXML::Text#<<
https://bugs.ruby-lang.org/issues/8602

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


以下のコードは "<e>foo bar</e>" が出力されることが期待されますが実際には "<e>foo</e>" が出力されます。 
  require 'rexml/document'
  doc = REXML::Document.new("<e/>")
  doc.root.add_text("foo")
  doc.to_s
  doc.root.add_text(" bar")
  p doc.root.to_s
doc.to_s の部分をコメントアウトすると挙動が変わり "<e>foo bar</e>" が出力されます。

REXML::Element#add_text が呼び出している REXML::Text#<< が内部状態(@string)を変化させているにもかかわらず
キャッシュ(@normalized, @unnormalized)をクリアしていないのが原因だと思われます。

添付したパッチで修正されると思います。


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

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [ruby-dev:47487] [ruby-trunk - Bug #8602] REXML::Element#add_text and REXML::Text#<<
  2013-07-04 18:36 [ruby-dev:47482] [ruby-trunk - Bug #8602][Open] REXML::Element#add_text and REXML::Text#<< ohai (Ippei Obayashi)
@ 2013-07-07  2:53 ` kou (Kouhei Sutou)
  0 siblings, 0 replies; 2+ messages in thread
From: kou (Kouhei Sutou) @ 2013-07-07  2:53 UTC (permalink / raw
  To: ruby developers list


Issue #8602 has been updated by kou (Kouhei Sutou).

Assignee set to kou (Kouhei Sutou)

Text#<<のドキュメントを読むと、rawモードのときだけサポートしているようにみえました。
rawモードだと@normalize/@unnormalizeを使わないので、ここでこれらをクリアーしていないのは意図的だったのだろうと思います。

ただ、キャッシュをクリアーすることによりrawモードでもrawモードでなくても動くようになるので、キャッシュをクリアーすることにしました!

報告ありがとうございました!
----------------------------------------
Bug #8602: REXML::Element#add_text and REXML::Text#<<
https://bugs.ruby-lang.org/issues/8602#change-40336

Author: ohai (Ippei Obayashi)
Status: Closed
Priority: Normal
Assignee: kou (Kouhei Sutou)
Category: lib
Target version: 
ruby -v: ruby 2.1.0dev (2013-07-04 trunk 41732) [x86_64-linux]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


以下のコードは "<e>foo bar</e>" が出力されることが期待されますが実際には "<e>foo</e>" が出力されます。 
  require 'rexml/document'
  doc = REXML::Document.new("<e/>")
  doc.root.add_text("foo")
  doc.to_s
  doc.root.add_text(" bar")
  p doc.root.to_s
doc.to_s の部分をコメントアウトすると挙動が変わり "<e>foo bar</e>" が出力されます。

REXML::Element#add_text が呼び出している REXML::Text#<< が内部状態(@string)を変化させているにもかかわらず
キャッシュ(@normalized, @unnormalized)をクリアしていないのが原因だと思われます。

添付したパッチで修正されると思います。


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

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2013-07-07  3:20 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-07-04 18:36 [ruby-dev:47482] [ruby-trunk - Bug #8602][Open] REXML::Element#add_text and REXML::Text#<< ohai (Ippei Obayashi)
2013-07-07  2:53 ` [ruby-dev:47487] [ruby-trunk - Bug #8602] " kou (Kouhei Sutou)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).