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

ruby-changes:25416

From: naruse <ko1@a...>
Date: Mon, 5 Nov 2012 11:34:34 +0900 (JST)
Subject: [ruby-changes:25416] naruse:r37473 (trunk): * lib/cgi/core.rb: check if Tempfile is defined before use it.

naruse	2012-11-05 11:34:17 +0900 (Mon, 05 Nov 2012)

  New Revision: 37473

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

  Log:
    * lib/cgi/core.rb: check if Tempfile is defined before use it.
    
    * lib/cgi/core.rb: remove tempfiles only if tempfiles exist

  Modified files:
    trunk/ChangeLog
    trunk/lib/cgi/core.rb
    trunk/test/cgi/test_cgi_multipart.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 37472)
+++ ChangeLog	(revision 37473)
@@ -1,3 +1,9 @@
+Mon Nov  5 10:57:59 2012  NARUSE, Yui  <naruse@r...>
+
+	* lib/cgi/core.rb: check if Tempfile is defined before use it.
+
+	* lib/cgi/core.rb: remove tempfiles only if tempfiles exist
+
 Mon Nov  5 12:17:00 2012  Zachary Scott  <zachary@z...>
 
 	* lib/uri/http.rb (URI::HTTP.build): Fix example
@@ -4,6 +10,10 @@
 	  Patch by Carina C. Zona
 	  [Fixes #209 Github]
 
+Mon Nov  5 09:55:05 2012  Takeyuki FUJIOKA  <xibbar@r...>
+
+	* lib/cgi/core.rb: remove tempfile more early.
+
 Sun Nov  4 20:29:46 2012  Takeyuki FUJIOKA  <xibbar@r...>
 
 	* lib/cgi.rb, lib/cgi/*/rb: rename CGI#header to CGI#http_header,
Index: lib/cgi/core.rb
===================================================================
--- lib/cgi/core.rb	(revision 37472)
+++ lib/cgi/core.rb	(revision 37473)
@@ -484,7 +484,7 @@
         (n += 1) < max_count or raise StandardError.new("too many parameters.")
         ## create body (StringIO or Tempfile)
         body = create_body(bufsize < content_length)
-        tempfiles << body if body.kind_of? Tempfile
+        tempfiles << body if defined?(Tempfile) && body.kind_of?(Tempfile)
         class << body
           if method_defined?(:path)
             alias local_path path
@@ -542,7 +542,7 @@
         name = $1 || $2 || ''
         if body.original_filename.empty?
           value=body.read.dup.force_encoding(@accept_charset)
-          body.unlink if body.kind_of? Tempfile
+          body.unlink if defined?(Tempfile) && body.kind_of?(Tempfile)
           (params[name] ||= []) << value
           unless value.valid_encoding?
             if @accept_charset_error_block
@@ -567,7 +567,7 @@
       params.default = []
       params
     ensure
-      if $!
+      if $! && tempfiles
         tempfiles.each {|t|
           if t.path
             t.unlink
Index: test/cgi/test_cgi_multipart.rb
===================================================================
--- test/cgi/test_cgi_multipart.rb	(revision 37472)
+++ test/cgi/test_cgi_multipart.rb	(revision 37473)
@@ -2,6 +2,7 @@
 require 'cgi'
 require 'tempfile'
 require 'stringio'
+require_relative '../ruby/envutil'
 
 
 ##
@@ -332,6 +333,34 @@
     cgi['file'].unlink if cgi['file'].kind_of? Tempfile
   end
 
+  def test_cgi_multipart_without_tempfile
+    assert_in_out_err([], <<-'EOM')
+      require 'cgi'
+      require 'stringio'
+      ENV['REQUEST_METHOD'] = 'POST'
+      ENV['CONTENT_TYPE'] = 'multipart/form-data; boundary=foobar1234'
+      body = <<-BODY
+--foobar1234
+Content-Disposition: form-data: name=\"name1\"
+
+value1
+--foobar1234
+Content-Disposition: form-data: name=\"file1\"; filename=\"file1.html\"
+Content-Type: text/html
+
+<html>
+<body><p>Hello</p></body>
+</html>
+
+--foobar1234--
+BODY
+      body.gsub!(/\n/, "\r\n")
+      ENV['CONTENT_LENGTH'] = body.size.to_s
+      $stdin = StringIO.new(body)
+      CGI.new
+    EOM
+  end
+
   ###
 
   self.instance_methods.each do |method|

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

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