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('