From: Eito Katagiri Date: 2007-06-27T11:29:44+09:00 Subject: [ruby-list:43667] REXMLでのパーサーの不具合について 片桐と申します。 REXMLのパーサーに不具合があるようです。文字要素の中の"&"が、"&"として認 識されず、"&"のままで、認識される場合があります。 ある特定の$KCODEの値と"&"の直前の文字の組合せにおいて、この不具合は発生 します。すくなくともruby1.8系では発生する不具合のようです。 rexml/parsers/baseparser.rb中のunnormalizedメソッドの最後の方で、変数rv中の 文字列はUTF-8であるのに"rv.gsub( /&/, '&')"のように置換を行っているため 発生しているのではないかと考えています。 その不具合を再現させるためのテストケースとその不具合と修正するパッチをこの メールの最後に付けます。現在、運営しているサービスで問題が発生しており、早期 に修正したいため、パッチのレビューをこのリスト上でしていただけると幸いです。 最後になりますが、このような不具合報告をする必要がある場所はどこが適切なので しょうか? ruby-devとかruby-extなのでしょうか? 以上、宜しくお願いします。 ----- testcase start ----- require 'rexml/parsers/baseparser' require 'test/unit' class TC_REXML_Parsers_BaseParser < Test::Unit::TestCase def test_unnormalize_should_explicitly_use_utf8_character_set_for_regular_expression_to_replace_amplisand _kcode = $KCODE %w{N U E S}.each do |kcode| $KCODE = kcode parser = REXML::Parsers::BaseParser.new('') res = parser.unnormalize('負&勝&') assert_equal("#{[0x8ca0].pack("U")}&#{[0x52dd].pack("U")}&", res) end ensure $KCODE = _kcode end end ----- testcase end ----- ----- patch start ----- *** lib/rexml/parsers/baseparser.rb.orig 2007-02-13 08:01:19.000000000 +0900 --- lib/rexml/parsers/baseparser.rb 2007-06-27 09:32:00.000000000 +0900 *************** *** 427,433 **** rv.gsub!( er[0], er[2] ) if er end end ! rv.gsub!( /&/, '&' ) end rv end --- 427,433 ---- rv.gsub!( er[0], er[2] ) if er end end ! rv.gsub!( /&/u, '&' ) end rv end ----- patch end -----