Project

General

Profile

Actions

Bug #15057

closed

REXML::Text#value returns a double unescaped string in non-raw mode

Added by rna (Ryosuke Nanba) over 5 years ago. Updated over 5 years ago.

Status:
Rejected
Target version:
-
ruby -v:
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]
[ruby-dev:50625]

Description

REXML::Text オブジェクトが非rawモードの場合、REXML::Text#value がエスケープ済みのテキストを二重にエスケープ解除された文字列を返します。

例:

require 'rexml/document'
t = REXML::Text.new("&lt; <", false, nil, false)
t.to_s   # => "&amp;lt; &lt;"
t.value  # => "< <" (expected: "&lt; <")

REXML::Text#value のコメントに以下のような記述があるため、上の挙動は期待通りのように見えますが、このコメントそのものが誤りだと思います。

    #   t = Text.new( "< & &s; russell", false, nil, false )
    #   t.value   #-> "< & sean russell"

非rawモードではコンストラクタの第一引数に渡された文字列はテキストノードが表す文字列そのものを意味するはずです。上で渡された文字列中の "&s;" は実体参照ではなく単なる3文字のテキストを意味します。t.value は "< & &s; russell" であるべきだと思います。

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0