Skip to content

Commit

Permalink
* lib/cgi/core.rb: check if Tempfile is defined before use it.
Browse files Browse the repository at this point in the history
* lib/cgi/core.rb: remove tempfiles only if tempfiles exist

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37473 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
nurse committed Nov 5, 2012
1 parent 0ba78cb commit 0ba4526
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 3 deletions.
10 changes: 10 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,9 +1,19 @@
Mon Nov 5 10:57:59 2012 NARUSE, Yui <[email protected]>

* 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 <[email protected]>

* lib/uri/http.rb (URI::HTTP.build): Fix example
Patch by Carina C. Zona
[Fixes #209 Github]

Mon Nov 5 09:55:05 2012 Takeyuki FUJIOKA <[email protected]>

* lib/cgi/core.rb: remove tempfile more early.

Sun Nov 4 20:29:46 2012 Takeyuki FUJIOKA <[email protected]>

* lib/cgi.rb, lib/cgi/*/rb: rename CGI#header to CGI#http_header,
Expand Down
6 changes: 3 additions & 3 deletions lib/cgi/core.rb
Original file line number Diff line number Diff line change
Expand Up @@ -484,7 +484,7 @@ def read_multipart(boundary, content_length)
(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
Expand Down Expand Up @@ -542,7 +542,7 @@ def local_path
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
Expand All @@ -567,7 +567,7 @@ class << params[name].last;self;end.class_eval do
params.default = []
params
ensure
if $!
if $! && tempfiles
tempfiles.each {|t|
if t.path
t.unlink
Expand Down
29 changes: 29 additions & 0 deletions test/cgi/test_cgi_multipart.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
require 'cgi'
require 'tempfile'
require 'stringio'
require_relative '../ruby/envutil'


##
Expand Down Expand Up @@ -332,6 +333,34 @@ def test_cgi_multipart_boundary_10240 # [Bug #3866]
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|
Expand Down

0 comments on commit 0ba4526

Please sign in to comment.