ruby-changes:9343
From: yugui <ko1@a...>
Date: Fri, 19 Dec 2008 20:38:22 +0900 (JST)
Subject: [ruby-changes:9343] Ruby:r20881 (ruby_1_9_1): merges r20861 from trunk into ruby_1_9_1.
yugui 2008-12-19 20:37:50 +0900 (Fri, 19 Dec 2008) New Revision: 20881 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=20881 Log: merges r20861 from trunk into ruby_1_9_1. * lib/cgi/session.rb: fix bug for ignore session_id option. report from [ruby-core:18635], [Bug #572] * lib/cgi/core.rb: use Encoding#find when encoding set. * test/cgi/test_cgi_session.rb: test for session_id specified. Modified files: branches/ruby_1_9_1/ChangeLog branches/ruby_1_9_1/lib/cgi/core.rb branches/ruby_1_9_1/lib/cgi/session.rb branches/ruby_1_9_1/test/cgi/test_cgi_session.rb Index: ruby_1_9_1/ChangeLog =================================================================== --- ruby_1_9_1/ChangeLog (revision 20880) +++ ruby_1_9_1/ChangeLog (revision 20881) @@ -1,3 +1,12 @@ +Thu Dec 18 21:12:28 2008 Takeyuki FUJIOKA <xibbar@r...> + + * lib/cgi/session.rb: fix bug for ignore session_id option. + report from [ruby-core:18635], [Bug #572] + + * lib/cgi/core.rb: use Encoding#find when encoding set. + + * test/cgi/test_cgi_session.rb: test for session_id specified. + Thu Dec 18 16:48:12 2008 Yukihiro Matsumoto <matz@r...> * lib/optparse/version.rb: remove variable shadowing to stop Index: ruby_1_9_1/lib/cgi/session.rb =================================================================== --- ruby_1_9_1/lib/cgi/session.rb (revision 20880) +++ ruby_1_9_1/lib/cgi/session.rb (revision 20881) @@ -188,7 +188,6 @@ md5.update('foobar') session_id = md5.hexdigest end - @new_session = true session_id end private :create_new_id @@ -256,6 +255,7 @@ unless session_id if option['new_session'] session_id = create_new_id + @new_session = true end end unless session_id @@ -271,6 +271,7 @@ raise ArgumentError, "session_key `%s' should be supplied"%session_key end session_id = create_new_id + @new_session = true end end @session_id = session_id @@ -281,7 +282,8 @@ unless option.fetch('new_session', true) raise ArgumentError, "invalid session_id `%s'"%session_id end - session_id = @session_id = create_new_id + session_id = @session_id = create_new_id unless session_id + @new_session=true retry end request.instance_eval do Index: ruby_1_9_1/lib/cgi/core.rb =================================================================== --- ruby_1_9_1/lib/cgi/core.rb (revision 20880) +++ ruby_1_9_1/lib/cgi/core.rb (revision 20881) @@ -590,7 +590,7 @@ read_from_cmdline end.dup.force_encoding(@accept_charset) ) - unless @accept_charset=~/ASCII-8BIT/i || @accept_charset==Encoding::ASCII_8BIT + unless Encoding.find(@accept_charset) == Encoding::ASCII_8BIT @params.each do |key,values| values.each do |value| unless value.valid_encoding? Index: ruby_1_9_1/test/cgi/test_cgi_session.rb =================================================================== --- ruby_1_9_1/test/cgi/test_cgi_session.rb (revision 20880) +++ ruby_1_9_1/test/cgi/test_cgi_session.rb (revision 20881) @@ -91,7 +91,83 @@ assert_equal(value1,session["key1"]) assert_equal(value2,session["key2"]) session.close + end + def test_cgi_session_specify_session_id + @environ = { + 'REQUEST_METHOD' => 'GET', + # 'QUERY_STRING' => 'id=123&id=456&id=&str=%40h+%3D%7E+%2F%5E%24%2F', + # 'HTTP_COOKIE' => '_session_id=12345; name1=val1&val2;', + 'SERVER_SOFTWARE' => 'Apache 2.2.0', + 'SERVER_PROTOCOL' => 'HTTP/1.1', + } + value1="value1" + value2="\x8F\xBC\x8D]" + value2.force_encoding("SJIS") if RUBY_VERSION>="1.9" + ENV.update(@environ) + cgi = CGI.new + session = CGI::Session.new(cgi,"tmpdir"=>@session_dir,"session_id"=>"foo") + session["key1"]=value1 + session["key2"]=value2 + assert_equal(value1,session["key1"]) + assert_equal(value2,session["key2"]) + assert_equal("foo",session.session_id) + session_id=session.session_id + session.close + $stdout = StringIO.new + cgi.out{""} + @environ = { + 'REQUEST_METHOD' => 'GET', + # 'HTTP_COOKIE' => "_session_id=#{session_id}", + 'QUERY_STRING' => "_session_id=#{session.session_id}", + 'SERVER_SOFTWARE' => 'Apache 2.2.0', + 'SERVER_PROTOCOL' => 'HTTP/1.1', + } + ENV.update(@environ) + cgi = CGI.new + session = CGI::Session.new(cgi,"tmpdir"=>@session_dir) + $stdout = StringIO.new + assert_equal(value1,session["key1"]) + assert_equal(value2,session["key2"]) + assert_equal("foo",session.session_id) + session.close + end + def test_cgi_session_specify_session_key + @environ = { + 'REQUEST_METHOD' => 'GET', + # 'QUERY_STRING' => 'id=123&id=456&id=&str=%40h+%3D%7E+%2F%5E%24%2F', + # 'HTTP_COOKIE' => '_session_id=12345; name1=val1&val2;', + 'SERVER_SOFTWARE' => 'Apache 2.2.0', + 'SERVER_PROTOCOL' => 'HTTP/1.1', + } + value1="value1" + value2="\x8F\xBC\x8D]" + value2.force_encoding("SJIS") if RUBY_VERSION>="1.9" + ENV.update(@environ) + cgi = CGI.new + session = CGI::Session.new(cgi,"tmpdir"=>@session_dir,"session_key"=>"bar") + session["key1"]=value1 + session["key2"]=value2 + assert_equal(value1,session["key1"]) + assert_equal(value2,session["key2"]) + session_id=session.session_id + session.close + $stdout = StringIO.new + cgi.out{""} + @environ = { + 'REQUEST_METHOD' => 'GET', + 'HTTP_COOKIE' => "bar=#{session_id}", + # 'QUERY_STRING' => "bar=#{session.session_id}", + 'SERVER_SOFTWARE' => 'Apache 2.2.0', + 'SERVER_PROTOCOL' => 'HTTP/1.1', + } + ENV.update(@environ) + cgi = CGI.new + session = CGI::Session.new(cgi,"tmpdir"=>@session_dir,"session_key"=>"bar") + $stdout = StringIO.new + assert_equal(value1,session["key1"]) + assert_equal(value2,session["key2"]) + session.close end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/