[#44310] プログラムに対して意図したとおりの文字列を渡す方法 — "Information Kanasansoft" <kanasansoft@...>

kanasanです。

9 messages 2007/12/05

[#44332] クラス:相互参照系の作成方法について質問です — "Saburoh Sakai" <sabroh@...>

はじめまして、さかいと申します。

12 messages 2007/12/11

[#44366] Rake改善プロジェクト — "Hajime Hoshi" <hajimehoshi@...>

東京大学修士 1 年の星一と申します。

14 messages 2007/12/19

[ruby-list:44327] cgi.rbでmultipartのときにcontent_typeに余計な"\r"がつく

From: "Makoto Kuwata" <kwa@...>
Date: 2007-12-07 13:28:56 UTC
List: ruby-list #44327
桑田といいます。

Ruby1.8.6のcgi.rbで、multipartのときにcontent_typeに "\r" が
含まれてしまいます。おそらくバグだと思いますので報告します。

次が再現コードです。最後の p cgi['file1'].content_type は
"text/html" が期待されますが、実際には "text/html\r" となり、
末尾に余計な "\r" が含まれてしまいます。

--------------------
boundary = 'boundary123456789'
s = ''
s << "--#{boundary}\r\n"
s << "Content-Disposition: form-data: name=\"file1\";
filename=\"file.html\"\r\n"
s << "Content-Type: text/html\r\n"
s << "\r\n"
s << "<html><body><h1>Hello</h1></body></html>\n"
s << "\r\n"
s << "--#{boundary}--\r\n"

require 'cgi'
require 'stringio'
$stdin = StringIO.new(s)
ENV['REQUEST_METHOD'] = 'POST'
ENV['CONTENT_TYPE'] = "multipart/form-data; boundary=#{boundary}"
ENV['CONTENT_LENGTH'] = s.length.to_s
cgi = CGI.new
p cgi['file1'].content_type  # expected:"text/html", actual:"text/html\r"
--------------------


以下がパッチです。

index: lib/cgi.rb
======================================================================
--- /usr/local/lib/ruby/1.8/cgi.rb	2007-05-23 06:58:09.000000000 +0900
+++ lib/cgi.rb	2007-12-07 19:21:03.000000000 +0900
@@ -1046,10 +1046,11 @@
 	  filename = CGI::unescape(filename)
 	end

         /Content-Type: (.*)/ni.match(head)
         content_type = ($1 or "")
+        content_type.chomp!

         (class << body; self; end).class_eval do
           alias local_path path
           define_method(:original_filename) {filename.dup.taint}
           define_method(:content_type) {content_type.dup.taint}
======================================================================


以上です。

--
makoto kuwata

In This Thread

Prev Next