[前][次][番号順一覧][スレッド一覧]

ruby-changes:8621

From: xibbar <ko1@a...>
Date: Sat, 8 Nov 2008 23:53:13 +0900 (JST)
Subject: [ruby-changes:8621] Ruby:r20156 (trunk): * lib/cgi/session.rb (FileStore): use marshalized data.

xibbar	2008-11-08 23:52:59 +0900 (Sat, 08 Nov 2008)

  New Revision: 20156

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=20156

  Log:
    * lib/cgi/session.rb (FileStore): use marshalized data.
    * test/cgi/session_dir: add a session directory in test.
    * test/cgi/test_cgi_session.rb: add a test.

  Added directories:
    trunk/test/cgi/session_dir/
  Added files:
    trunk/test/cgi/test_cgi_session.rb
  Modified files:
    trunk/ChangeLog
    trunk/lib/cgi/session.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 20155)
+++ ChangeLog	(revision 20156)
@@ -1,3 +1,11 @@
+Sat Nov  8 23:47:45 2008  Takeyuki FUJIOKA  <xibbar@r...>
+
+	* lib/cgi/session.rb (FileStore): use marshalized data.
+
+	* test/cgi/session_dir: add a session directory in test.
+
+	* test/cgi/test_cgi_session.rb: add a test. 
+
 Sat Nov  8 21:57:03 2008  Takeyuki FUJIOKA  <xibbar@r...>
 
 	* lib/cgi/session.rb: remove debug code. 
Index: lib/cgi/session.rb
===================================================================
--- lib/cgi/session.rb	(revision 20155)
+++ lib/cgi/session.rb	(revision 20156)
@@ -404,7 +404,7 @@
             for line in f
               line.chomp!
               k, v = line.split('=',2)
-              @hash[CGI::unescape(k)] = CGI::unescape(v)
+              @hash[CGI::unescape(k)] = Marshal.restore(CGI::unescape(v))
             end
           ensure
             f.close unless f.nil?
@@ -422,7 +422,7 @@
           lockf.flock File::LOCK_EX
           f = File.open(@path+".new", File::CREAT|File::TRUNC|File::WRONLY, 0600)
           for k,v in @hash
-            f.printf "%s=%s\n", CGI::escape(k), CGI::escape(String(v))
+            f.printf "%s=%s\n", CGI::escape(k), CGI::escape(String(Marshal.dump(v)))
           end
           f.close
           File.rename @path+".new", @path
Index: test/cgi/test_cgi_session.rb
===================================================================
--- test/cgi/test_cgi_session.rb	(revision 0)
+++ test/cgi/test_cgi_session.rb	(revision 20156)
@@ -0,0 +1,59 @@
+require 'test/unit'
+require 'cgi'
+require 'cgi/session'
+require 'stringio'
+def d(obj)
+  STDERR.write(obj.inspect+"\n")
+end
+
+
+class CGISessionTest < Test::Unit::TestCase
+
+
+  def setup
+    FileUtils.rm(Dir::glob(File.dirname(__FILE__)+"/session_dir/*"))
+  end
+
+
+  def teardown
+    @environ.each do |key, val| ENV.delete(key) end
+    $stdout = STDOUT
+#    FileUtils.rm(Dir::glob(File.dirname(__FILE__)+"/session_dir/*"))
+  end
+
+  def test_cgi_session_core
+    @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',
+    }
+    ENV.update(@environ)
+    cgi = CGI.new
+    session = CGI::Session.new(cgi,"tmpdir"=>File.dirname(__FILE__)+"/session_dir")
+    session["key1"]="value1"
+    session["key2"]="\x8F\xBC\x8D]".force_encoding("SJIS")
+    assert_equal("value1",session["key1"])
+    assert_equal("\x8F\xBC\x8D]".force_encoding("SJIS"),session["key2"])
+    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"=>File.dirname(__FILE__)+"/session_dir")
+    $stdout = StringIO.new
+    assert_equal("value1",session["key1"])
+    assert_equal("\x8F\xBC\x8D]".force_encoding("SJIS"),session["key2"])
+    session.close
+
+  end
+end

Property changes on: test/cgi/test_cgi_session.rb
___________________________________________________________________
Name: svn:executable
   + *


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]