[#33561] open-uri problem — rubikitch@...
るびきちです。
[#33567] rational, complex and nuby — Tadayoshi Funaba <tadf@...>
ruby に rational と complex を組みこもうと試していて nuby という派生物
なかだです。
> 若干古い1.8.6がベースでしょうか。
なかだです。
> 2002/01/25版にその後の修正を手で追加した状態? ChangeLogをみたら、
なかだです。
> ちょっと見たところ、Enumerable#stable_sort_byがsortを使っている
原です。
[#33580] Re: cgi.rb再構築案 — "Makoto Kuwata" <kwa@...>
桑田といいます。
まつもと ゆきひろです
なかだです。
[#33611] Solaris で timeout.rb が Segmentation fault する。 — shiiya@...
はじめまして。椎屋と申します。
なかだです。
椎屋です。反応ありがとうございます。
なかだです。
さとうふみやす @ OSS テクノロジです。
In article <87r6foys1z.wl%fumiyas@osstech.jp>,
At Fri, 8 Feb 2008 14:00:35 +0900,
In article <87prv8yovi.wl%fumiyas@osstech.jp>,
とみたです。
In article <20080219182203.2559fc3e.tommy@tmtm.org>,
[#33621] EUC-KR <-> UTF-8 transition table — "Park Ji-In" <tisphie@...>
朴 芝印です。
成瀬です。
At 05:00 08/02/07, NARUSE, Yui wrote:
朴 芝印です。
[#33628] encdet.rb — Tanaka Akira <akr@...>
前から考えていたのですが、ファイル先頭の magic comment や
まつもと ゆきひろです
In article <E1JN0fO-00084M-Dg@x61.netlab.jp>,
須藤です。
In article <20080214.203702.439940124859613817.kou@cozmixng.org>,
須藤です。
In article <20080215.210932.373570872046057306.kou@cozmixng.org>,
須藤です。
In article <20080219.210130.275954098091635027.kou@cozmixng.org>,
[#33646] require/load/autoload の encoding オプション — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
[#33662] rational, complex and mathn — Tadayoshi Funaba <tadf@...>
rational は floor、truncate、ceil、round を定義していません。Numeric
他にも問題、課題はあると思います。すぐに解決できるものと、そうでないも
ひとつ書き忘れました。
まつもと ゆきひろです
> 原さんのrationalは導入予定がありますので、この機会にもう一度
原です。
> 前にふなばさんと個人的なメールのやりとりで、結局また私がrationalをまと
原です。
> > それなりに速くはなるし、単純なところでそれなりに満足していますが、一度、
nurat 0.0.2 を出しました (ついでに nucomp も)。
仕様を確認していきたいと思います。
まつもと ゆきひろです
原です。
> > new!はRubyで実装しているためにだけ必要なので、Cで実装するな
原です。
> Rational::Unify が定義されているときは、Rational.new(1,1) で Integer
> Rational() は、1つか2つの引数をとる。
> 実際的に重要な機能が Rational() という名前で固定されるのはクラスの定義
もうあまり手を入れないでおこうと思ったのです、つい手を入れてしまいまし
原です。
ちょっと実験してみました。原さんの rational は、かけ算割り算が速いので、
で、考えていたんですが、目的は、最速の rational を作ることではなくて、
原です。
成瀬です。
まつもと ゆきひろです
> はい。Complexについても1.9の間に組み込んでよいと思います。
まつもと ゆきひろです
nurat を組みこんでみました。最低限必要な修正だけになっていると思います。
rational と complex を 1.9 に組みこむ作業をしました。
異議がなければ、若干の手直しの後、次週末にでも trunk にコミットしよう
> 異議がなければ、若干の手直しの後、次週末にでも trunk にコミットしよう
まつもと ゆきひろです
[#33674] erb.rb の仕様について — "Makoto Kuwata" <kwa@...>
桑田といいます。
[#33676] Suggestion: Proc#curry — "Yusuke ENDOH" <mame@...>
遠藤と申します。
[#33679] bigdecimal — Tadayoshi Funaba <tadf@...>
bigdecimal/math.rb の BigMath は、利用者が include してつかうことを前
Integer や Float に比べると、BigDicimal() は、1 や 1.1 を受けつけない、
斎藤と申します。
> 仮にBigDecimal(1.1)を、(二進小数として)受け付けると、「BigDecimalでは、
まつもと ゆきひろです
[#33699] trunk: インストールファイルのアクセス権 — pegacorn <subscriber.jp@...>
trunk で、インストールファイルのアクセス権が適切に設定されないものが
[#33712] Array の product の戻り値 — "Hideo Konami" <konami@...>
小波です。
[#33726] Re: [ruby-cvs:22680] Ruby:r15443 (trunk): * bootstraptest/runner.rb, bootstraptest/test_method.rb, enc/depend, — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
成瀬です。
In article <47B26518.60309@airemix.com>,
Tanaka Akira wrote:
こんにちは、なかむら(う)です。
成瀬です。
[#33825] Ruby M17N 会議の議事録 — "NARUSE, Yui" <naruse@...>
成瀬です。
[#33837] spec of Rational — Shin-ichiro HARA <sinara@...>
原です。
[#33838] 文字列処理の高速化 ? — Martin Duerst <duerst@...>
ただの一例ですが、先週の金曜日に松本さんに見せたときに
[#33843] IO.copy_stream — Tanaka Akira <akr@...>
IO.copy_stream をつけるのはどうでしょうか。
[#33889] Re: [ ruby-Bugs-17454 ] irb crash while iterating over all objects — Urabe Shyouhei <shyouhei@...>
卜部です。ちょっとお知恵を拝借したく。
ミスって送信ボタン押しちゃった
こんにちは、なかむら(う)です。
なかだです。
Nobuyoshi Nakada さんは書きました:
豊福です。
まつもと ゆきひろです
豊福です。
まつもと ゆきひろです
豊福です。
まつもと ゆきひろです
豊福です。
[#33894] character encodings differ: US-ASCII and dummy encoding — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
まつもと ゆきひろです
[#33916] UTF_16LE.dummy? returns false — sheepman <sheepman@...>
こんにちは sheepman です。
[#33926] --host=i586-mingw32msvc — Kouhei Sutou <kou@...>
須藤です。
[#33937] patch for ruby_1_8_6/lib/rexml/element.rb@12852 — oshida@...
押田です。
[#33943] warning about space before argument parentheses — Nobuyoshi Nakada <nobu@...>
なかだです。
[ruby-dev:33609] Re: cgi.rb再構築案
なかだです。
At Wed, 6 Feb 2008 02:06:34 +0900,
Makoto Kuwata wrote in [ruby-dev:33606]:
> CGI::Cookieを、DelegateClass(Array) を使わないように
> するためのpatch (for 1.8.6 p111) です。
1.9ではDelegateClass(Array)はかなり改善したと思います。
> 続いて以下の問題に対するpatch (for 1.8.6 p.111) です。
> [ruby-list:44321] で投稿したのと同じですが再送します。
>
> * multipart時およびPOSTメソッド時に受信するデータのサイズを
> 確認していないため、巨大なデータを送信されるとサーバ資源が
> 食いつぶされる。
> → Content-Lengthをチェックし、長過ぎれば例外を発生させる。
>
> * multipart時に任意の数のparameterを受け付けるため、
> 例えば数千個のparameterを送信することで、サーバにたくさんの
> Tempfileオブジェクトを生成することができてしまう。
> → parameterの数をチェックし、多すぎれば例外を発生させる。
StandardErrorを使っていますが、別のほうがいいんじゃないでしょう
か。RangeError?
> 簡単化のため制限値は定数で指定してますが、必要であればクラス変数や
> インスタンス変数で指定できるようにしてください。
後者にしてみました。[ruby-dev:33606]からの差分にしようかと思いま
したが、パッチが壊れているようなのでsvn HEADからの差分です。
他に、NEEDS_BINMODEの判定条件がdarwinも含んでしまっている点や、
env_tableを使わずに直接ENVを使っているところも修正しています。
At Mon, 4 Feb 2008 04:40:16 +0900,
Makoto Kuwata wrote in [ruby-dev:33580]:
> (6) CGI#initialize() の中で ENV['QUERY_STRING'] や ENV['HTTP_COOKIE'] を
> parse しているので、FastCGI のように ENV を使わない場合、
> cgi.rb を使うのが困難
> (実際、fcgi.rb での cgi.rb 対策は悲惨なコードになっている)
> → 解決策: workaround として、$ENV = ENV をしてから、
> CGI#initialize() では ENV のかわりに $ENV を使うように変更
これに関しては、CGIを継承したクラスでenv_tableをオーバーライドす
るのが正しいのではないでしょうか。たしかに漏れている部分もありま
したが、その二つについては以前からenv_tableを使うようになってい
ます。
Index: lib/cgi.rb
===================================================================
--- lib/cgi.rb (revision 15377)
+++ lib/cgi.rb (working copy)
@@ -287,5 +287,5 @@ class CGI
REVISION = '$Id$' #:nodoc:
- NEEDS_BINMODE = true if /WIN/ni.match(RUBY_PLATFORM)
+ NEEDS_BINMODE = true if /cygwin|mswin|bccwin/.match(RUBY_PLATFORM)
# Path separators in different environments.
@@ -737,5 +737,4 @@ class CGI
end
- require "delegate"
# Class representing an HTTP cookie.
@@ -772,5 +771,5 @@ class CGI
# cookie1.expires = Time.now + 30
# cookie1.secure = true
- class Cookie < DelegateClass(Array)
+ class Cookie
# Create a new CGI::Cookie object.
@@ -808,5 +807,5 @@ class CGI
@path = options["path"]
else
- %r|^(.*/)|.match(ENV["SCRIPT_NAME"])
+ %r|^(.*/)|.match(env_table["SCRIPT_NAME"])
@path = ($1 or "")
end
@@ -859,4 +858,34 @@ class CGI
end
+ ##--
+ ## define methods instead of DelegateClass(Array)
+ ##++
+
+ include Enumerable ##:nodoc:
+
+ def [](*args) ##:nodoc:
+ @value[*args]
+ end
+
+ def []=(index, value) ##:nodoc:
+ @value[index] = value
+ end
+
+ def each(&block) ##:nodoc:
+ @value.each(&block)
+ end
+
+ def method_missing(m, *args) ##:nodoc:
+ @value.respond_to?(m) ? @value.__send__(m, *args) : super
+ end
+
+ def respond_to?(m) ##:nodoc:
+ super(m) || @value.respond_to?(m)
+ end
+
+ #def inspect; @value.inspect; end
+ #def ==(arg); @value == arg; end
+ #def ===(arg); @value === arg; end
+
end # class Cookie
@@ -908,4 +937,17 @@ class CGI
end
+ # Maximum content length of post data
+ MAX_CONTENT_LENGTH = 2 * 1024 * 1024
+
+ # Maximum content length of multipart data
+ MAX_MULTIPART_LENGTH = 128 * 1024 * 1024
+
+ # Maximum number of request parameters when multipart
+ MAX_MULTIPART_COUNT = 128
+
+ # Maximum size to use StringIO
+ MAX_STRINGIO_SIZE = 10240
+
+
# Mixin module. It provides the follow functionality groups:
#
@@ -985,7 +1027,11 @@ class CGI
end
+ count = @max_multipart_count
loop do
+ unless (count -= 1) >= 0
+ raise RangeError, "too many parameters"
+ end
head = nil
- if 10240 < content_length
+ if content_length > @max_stringio_size
require "tempfile"
body = Tempfile.new("CGI")
@@ -1107,5 +1153,9 @@ class CGI
boundary = $1.dup
@multipart = true
- @params = read_multipart(boundary, Integer(env_table['CONTENT_LENGTH']))
+ content_length = Integer(env_table['CONTENT_LENGTH'])
+ unless content_length <= @max_multipart_length
+ raise RangeError, "too large multipart data"
+ end
+ @params = read_multipart(boundary, content_length)
else
@multipart = false
@@ -1120,5 +1170,9 @@ class CGI
when "POST"
stdinput.binmode if defined? stdinput.binmode
- stdinput.read(Integer(env_table['CONTENT_LENGTH'])) or ''
+ content_length = Integer(env_table['CONTENT_LENGTH'])
+ unless content_length <= @max_content_length
+ raise RangeError, "too large post data"
+ end
+ stdinput.read(content_length) or ''
else
read_from_cmdline
@@ -2263,9 +2317,13 @@ class CGI
# CGI locations, which varies according to the REQUEST_METHOD.
def initialize(type = "query")
- if defined?(MOD_RUBY) && !ENV.key?("GATEWAY_INTERFACE")
+ if defined?(MOD_RUBY) && !env_table.key?("GATEWAY_INTERFACE")
Apache.request.setup_cgi_env
end
extend QueryExtension
+ @max_content_length ||= MAX_CONTENT_LENGTH
+ @max_multipart_length ||= MAX_MULTIPART_LENGTH
+ @max_multipart_count ||= MAX_MULTIPART_COUNT
+ @max_stringio_size ||= MAX_STRINGIO_SIZE
@multipart = false
if defined?(CGI_PARAMS)
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦