[#30408] Ruby 1.8.6 preview2 has been released — "Akinori MUSHA" <knu@...>

 Ruby 1.8.6 preview2 をリリースしました。

20 messages 2007/02/24
[#30414] fail to autoload at $SAFE==4 (Re: Ruby 1.8.6 preview2 has been released) — Hidetoshi NAGAI <nagai@...> 2007/02/25

永井@知能.九工大です.

[#30418] Re: fail to autoload at $SAFE==4 (Re: Ruby 1.8.6 preview2 has been released) — Nobuyoshi Nakada <nobu@...> 2007/02/25

なかだです。

[ruby-dev:30289] cgi.rbのunescapeHTML処理

From: Keiji Yoshimi <walf443@...>
Date: 2007-02-06 11:59:49 UTC
List: ruby-dev #30289
よしみと申します。

あまり深刻ではないと思いますがcgi.rbで
CGI.unescapeHTMLを使ったときにエスケープされていない&が単体で存在したときに
その直後にあるHTMLエンティティが影響を受けて変換されないようです。

Index: lib/cgi.rb
===================================================================
--- lib/cgi.rb  (revision 11643)
+++ lib/cgi.rb  (working copy)
@@ -367,7 +367,7 @@
   #   CGI::unescapeHTML("Usage: foo &quot;bar&quot; &lt;baz&gt;")
   #      # => "Usage: foo \"bar\" <baz>"
   def CGI::unescapeHTML(string)
-    string.gsub(/&(.*?);/n) do
+    string.gsub(/&([a-zA-Z0-9]*?);/n) do
       match = $1.dup
       case match
       when /\Aamp\z/ni           then '&'

一応TestCaseもつけておきます。

# test/test_cgi.rb
require 'test/unit'
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/', 'cgi'))

class TestCGI < Test::Unit::TestCase
  def assert_unescapeHTML expected, actual
    assert_equal(expected, CGI.unescapeHTML(actual))
  end

  def test_unescapeHTML
    assert_unescapeHTML('& &', '& &amp;')
    assert_unescapeHTML('&mref&', '&mref&amp;')
    assert_unescapeHTML('&3923&', '&3923&amp;')
  end
end

もしかしたら既に指摘されていることかもしれませんがよろしくお願いします。

In This Thread

Prev Next