From 9e5d68f03f6800b0ccde3bee32ac1789a1d0dc14 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Wed, 26 Feb 2025 18:12:00 +0900 Subject: [PATCH] Merge cgi-0.3.7 --- lib/cgi.rb | 2 +- lib/cgi/cookie.rb | 5 +++-- lib/cgi/util.rb | 4 ++-- test/cgi/test_cgi_util.rb | 18 ++++++++++++++++++ 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/lib/cgi.rb b/lib/cgi.rb index 4cd6b3bd8e..7dc3a64941 100644 --- a/lib/cgi.rb +++ b/lib/cgi.rb @@ -288,7 +288,7 @@ # class CGI - VERSION = "0.3.6" + VERSION = "0.3.7" end require 'cgi/core' diff --git a/lib/cgi/cookie.rb b/lib/cgi/cookie.rb index 9498e2f9fa..1c4ef6a600 100644 --- a/lib/cgi/cookie.rb +++ b/lib/cgi/cookie.rb @@ -190,9 +190,10 @@ class CGI values ||= "" values = values.split('&').collect{|v| CGI.unescape(v,@@accept_charset) } if cookies.has_key?(name) - values = cookies[name].value + values + cookies[name].concat(values) + else + cookies[name] = Cookie.new(name, *values) end - cookies[name] = Cookie.new(name, *values) end cookies diff --git a/lib/cgi/util.rb b/lib/cgi/util.rb index 5a5c77ac97..ce77a0ccd5 100644 --- a/lib/cgi/util.rb +++ b/lib/cgi/util.rb @@ -178,7 +178,7 @@ module CGI::Util def escapeElement(string, *elements) elements = elements[0] if elements[0].kind_of?(Array) unless elements.empty? - string.gsub(/<\/?(?:#{elements.join("|")})(?!\w)(?:.|\n)*?>/i) do + string.gsub(/<\/?(?:#{elements.join("|")})\b[^<>]*+>?/im) do CGI.escapeHTML($&) end else @@ -198,7 +198,7 @@ module CGI::Util def unescapeElement(string, *elements) elements = elements[0] if elements[0].kind_of?(Array) unless elements.empty? - string.gsub(/<\/?(?:#{elements.join("|")})(?!\w)(?:.|\n)*?>/i) do + string.gsub(/<\/?(?:#{elements.join("|")})\b(?>[^&]+|&(?![gl]t;)\w+;)*(?:>)?/im) do unescapeHTML($&) end else diff --git a/test/cgi/test_cgi_util.rb b/test/cgi/test_cgi_util.rb index a3be193a13..d058cccd86 100644 --- a/test/cgi/test_cgi_util.rb +++ b/test/cgi/test_cgi_util.rb @@ -244,6 +244,14 @@ class CGIUtilTest < Test::Unit::TestCase assert_equal("
<A HREF="url"></A>", escapeElement('
', ["A", "IMG"])) assert_equal("
<A HREF="url"></A>", escape_element('
', "A", "IMG")) assert_equal("
<A HREF="url"></A>", escape_element('
', ["A", "IMG"])) + + assert_equal("<A <A HREF="url"></A>", escapeElement('', "A", "IMG")) + assert_equal("<A <A HREF="url"></A>", escapeElement('', ["A", "IMG"])) + assert_equal("<A <A HREF="url"></A>", escape_element('', "A", "IMG")) + assert_equal("<A <A HREF="url"></A>", escape_element('', ["A", "IMG"])) + + assert_equal("<A <A ", escapeElement('', unescapeElement(escapeHTML('
'), ["A", "IMG"])) assert_equal('<BR>', unescape_element(escapeHTML('
'), "A", "IMG")) assert_equal('<BR>', unescape_element(escapeHTML('
'), ["A", "IMG"])) + + assert_equal('', unescapeElement(escapeHTML(''), "A", "IMG")) + assert_equal('', unescapeElement(escapeHTML(''), ["A", "IMG"])) + assert_equal('', unescape_element(escapeHTML(''), "A", "IMG")) + assert_equal('', unescape_element(escapeHTML(''), ["A", "IMG"])) + + assert_equal('