diff options
| author | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2025-02-26 18:14:54 +0900 |
|---|---|---|
| committer | nagachika <nagachika@ruby-lang.org> | 2025-03-08 16:27:22 +0900 |
| commit | ecb9f7ef372c70c3e4fa81a5002533814a94aa86 (patch) | |
| tree | 4b98253fbe01b1ee148a7279e93af2cdbadacf47 | |
| parent | e58827163002e816e49ed18007f4fa3481102b08 (diff) | |
Merge cgi-0.4.2
| -rw-r--r-- | lib/cgi.rb | 2 | ||||
| -rw-r--r-- | lib/cgi/cgi.gemspec | 3 | ||||
| -rw-r--r-- | lib/cgi/cookie.rb | 5 | ||||
| -rw-r--r-- | lib/cgi/session/pstore.rb | 7 | ||||
| -rw-r--r-- | lib/cgi/util.rb | 4 | ||||
| -rw-r--r-- | test/cgi/test_cgi_session.rb | 2 | ||||
| -rw-r--r-- | test/cgi/test_cgi_util.rb | 18 |
7 files changed, 32 insertions, 9 deletions
diff --git a/lib/cgi.rb b/lib/cgi.rb index 7af85e7fc8..69c3c4fd24 100644 --- a/lib/cgi.rb +++ b/lib/cgi.rb @@ -288,7 +288,7 @@ # class CGI - VERSION = "0.4.1" + VERSION = "0.4.2" end require 'cgi/core' diff --git a/lib/cgi/cgi.gemspec b/lib/cgi/cgi.gemspec index 381c55a5ca..5ef00d591d 100644 --- a/lib/cgi/cgi.gemspec +++ b/lib/cgi/cgi.gemspec @@ -25,7 +25,8 @@ Gem::Specification.new do |spec| spec.executables = [] spec.files = [ - "LICENSE.txt", + "COPYING", + "BSDL", "README.md", *Dir["lib{.rb,/**/*.rb}", "bin/*"] ] 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/session/pstore.rb b/lib/cgi/session/pstore.rb index 45d0d8ae2c..6e3d10f075 100644 --- a/lib/cgi/session/pstore.rb +++ b/lib/cgi/session/pstore.rb @@ -11,7 +11,10 @@ # cgi/session.rb for more details on session storage managers. require_relative '../session' -require 'pstore' +begin + require 'pstore' +rescue LoadError +end class CGI class Session @@ -82,7 +85,7 @@ class CGI File::unlink path end - end + end if defined?(::PStore) end end # :enddoc: diff --git a/lib/cgi/util.rb b/lib/cgi/util.rb index 4986e544e0..5f12eae130 100644 --- a/lib/cgi/util.rb +++ b/lib/cgi/util.rb @@ -184,7 +184,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 @@ -204,7 +204,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_session.rb b/test/cgi/test_cgi_session.rb index b16b69766e..32b907d741 100644 --- a/test/cgi/test_cgi_session.rb +++ b/test/cgi/test_cgi_session.rb @@ -91,7 +91,7 @@ class CGISessionTest < Test::Unit::TestCase assert_equal(value1,session["key1"]) assert_equal(value2,session["key2"]) session.close - end + end if defined?(::PStore) def test_cgi_session_specify_session_id update_env( 'REQUEST_METHOD' => 'GET', diff --git a/test/cgi/test_cgi_util.rb b/test/cgi/test_cgi_util.rb index b0612fc87d..bff77f7ffc 100644 --- a/test/cgi/test_cgi_util.rb +++ b/test/cgi/test_cgi_util.rb @@ -269,6 +269,14 @@ class CGIUtilTest < Test::Unit::TestCase assert_equal("<BR><A HREF="url"></A>", escapeElement('<BR><A HREF="url"></A>', ["A", "IMG"])) assert_equal("<BR><A HREF="url"></A>", escape_element('<BR><A HREF="url"></A>', "A", "IMG")) assert_equal("<BR><A HREF="url"></A>", escape_element('<BR><A HREF="url"></A>', ["A", "IMG"])) + + assert_equal("<A <A HREF="url"></A>", escapeElement('<A <A HREF="url"></A>', "A", "IMG")) + assert_equal("<A <A HREF="url"></A>", escapeElement('<A <A HREF="url"></A>', ["A", "IMG"])) + assert_equal("<A <A HREF="url"></A>", escape_element('<A <A HREF="url"></A>', "A", "IMG")) + assert_equal("<A <A HREF="url"></A>", escape_element('<A <A HREF="url"></A>', ["A", "IMG"])) + + assert_equal("<A <A ", escapeElement('<A <A ', "A", "IMG")) + assert_equal("<A <A ", escapeElement('<A <A ', ["A", "IMG"])) end @@ -277,6 +285,16 @@ class CGIUtilTest < Test::Unit::TestCase assert_equal('<BR><A HREF="url"></A>', unescapeElement(escapeHTML('<BR><A HREF="url"></A>'), ["A", "IMG"])) assert_equal('<BR><A HREF="url"></A>', unescape_element(escapeHTML('<BR><A HREF="url"></A>'), "A", "IMG")) assert_equal('<BR><A HREF="url"></A>', unescape_element(escapeHTML('<BR><A HREF="url"></A>'), ["A", "IMG"])) + + assert_equal('<A <A HREF="url"></A>', unescapeElement(escapeHTML('<A <A HREF="url"></A>'), "A", "IMG")) + assert_equal('<A <A HREF="url"></A>', unescapeElement(escapeHTML('<A <A HREF="url"></A>'), ["A", "IMG"])) + assert_equal('<A <A HREF="url"></A>', unescape_element(escapeHTML('<A <A HREF="url"></A>'), "A", "IMG")) + assert_equal('<A <A HREF="url"></A>', unescape_element(escapeHTML('<A <A HREF="url"></A>'), ["A", "IMG"])) + + assert_equal('<A <A ', unescapeElement(escapeHTML('<A <A '), "A", "IMG")) + assert_equal('<A <A ', unescapeElement(escapeHTML('<A <A '), ["A", "IMG"])) + assert_equal('<A <A ', unescape_element(escapeHTML('<A <A '), "A", "IMG")) + assert_equal('<A <A ', unescape_element(escapeHTML('<A <A '), ["A", "IMG"])) end end |
