[#33567] rational, complex and nuby — Tadayoshi Funaba <tadf@...>

ruby に rational と complex を組みこもうと試していて nuby という派生物

21 messages 2008/02/02

[#33580] Re: cgi.rb再構築案 — "Makoto Kuwata" <kwa@...>

桑田といいます。

17 messages 2008/02/03

[#33611] Solaris で timeout.rb が Segmentation fault する。 — shiiya@...

はじめまして。椎屋と申します。

15 messages 2008/02/06
[#33612] Re: Solaris で timeout.rb が Segmentation fault する。 — Nobuyoshi Nakada <nobu@...> 2008/02/06

なかだです。

[#33613] Re: Solaris で timeout.rb が Segmentation fault する。 — shiiya yoshitaka <shiiya@...> 2008/02/06

椎屋です。反応ありがとうございます。

[#33650] Re: Solaris で timeout.rb が Segmentation fault する。 — Nobuyoshi Nakada <nobu@...> 2008/02/08

なかだです。

[#33621] EUC-KR <-> UTF-8 transition table — "Park Ji-In" <tisphie@...>

朴 芝印です。

15 messages 2008/02/06

[#33628] encdet.rb — Tanaka Akira <akr@...>

前から考えていたのですが、ファイル先頭の magic comment や

18 messages 2008/02/07

[#33662] rational, complex and mathn — Tadayoshi Funaba <tadf@...>

rational は floor、truncate、ceil、round を定義していません。Numeric

66 messages 2008/02/08
[#33663] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/08

他にも問題、課題はあると思います。すぐに解決できるものと、そうでないも

[#33664] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/08

ひとつ書き忘れました。

[#33707] Re: rational, complex and mathn — Yukihiro Matsumoto <matz@...> 2008/02/12

まつもと ゆきひろです

[#33714] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/12

> 原さんのrationalは導入予定がありますので、この機会にもう一度

[#33727] Re: rational, complex and mathn — Shin-ichiro HARA <sinara@...> 2008/02/13

原です。

[#33761] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/13

> 前にふなばさんと個人的なメールのやりとりで、結局また私がrationalをまと

[#33788] Re: rational, complex and mathn — Shin-ichiro HARA <sinara@...> 2008/02/15

原です。

[#33795] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/15

> > それなりに速くはなるし、単純なところでそれなりに満足していますが、一度、

[#33806] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/16

nurat 0.0.2 を出しました (ついでに nucomp も)。

[#33812] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/16

仕様を確認していきたいと思います。

[#33815] Re: rational, complex and mathn — Yukihiro Matsumoto <matz@...> 2008/02/16

まつもと ゆきひろです

[#33818] Re: rational, complex and mathn — Shin-ichiro HARA <sinara@...> 2008/02/16

原です。

[#33819] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/17

> > new!はRubyで実装しているためにだけ必要なので、Cで実装するな

[#33821] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/17

> Rational() は、1つか2つの引数をとる。

[#33827] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/17

> 実際的に重要な機能が Rational() という名前で固定されるのはクラスの定義

[#33845] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/18

もうあまり手を入れないでおこうと思ったのです、つい手を入れてしまいまし

[#33886] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/21

ちょっと実験してみました。原さんの rational は、かけ算割り算が速いので、

[#33888] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/21

で、考えていたんですが、目的は、最速の rational を作ることではなくて、

[#33903] Re: rational, complex and mathn — Shin-ichiro HARA <sinara@...> 2008/02/22

原です。

[#33905] Re: rational, complex and mathn — "NARUSE, Yui" <naruse@...> 2008/02/22

成瀬です。

[#33908] Re: rational, complex and mathn — Yukihiro Matsumoto <matz@...> 2008/02/22

まつもと ゆきひろです

[#33914] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/23

> はい。Complexについても1.9の間に組み込んでよいと思います。

[#33679] bigdecimal — Tadayoshi Funaba <tadf@...>

bigdecimal/math.rb の BigMath は、利用者が include してつかうことを前

23 messages 2008/02/09
[#33680] Re: bigdecimal — Tadayoshi Funaba <tadf@...> 2008/02/09

Integer や Float に比べると、BigDicimal() は、1 や 1.1 を受けつけない、

[#33686] Re: bigdecimal — Tadashi Saito <[email protected]> 2008/02/10

斎藤と申します。

[#33698] Re: bigdecimal — Tadayoshi Funaba <tadf@...> 2008/02/11

> 仮にBigDecimal(1.1)を、(二進小数として)受け付けると、「BigDecimalでは、

[#33705] Re: bigdecimal — Yukihiro Matsumoto <matz@...> 2008/02/12

まつもと ゆきひろです

[#33726] Re: [ruby-cvs:22680] Ruby:r15443 (trunk): * bootstraptest/runner.rb, bootstraptest/test_method.rb, enc/depend, — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

14 messages 2008/02/13
[#33730] Re: [ruby-cvs:22680] Ruby:r15443 (trunk): * bootstraptest/runner.rb, bootstraptest/test_method.rb, enc/depend, — "NARUSE, Yui" <naruse@...> 2008/02/13

成瀬です。

[#33889] Re: [ ruby-Bugs-17454 ] irb crash while iterating over all objects — Urabe Shyouhei <shyouhei@...>

卜部です。ちょっとお知恵を拝借したく。

22 messages 2008/02/21
[#33892] Re: [ ruby-Bugs-17454 ] irb crash while iterating over all objects — Nobuyoshi Nakada <nobu@...> 2008/02/21

なかだです。

[#33909] Re: [ ruby-Bugs-17454 ] irb crash while iterating over all objects — Urabe Shyouhei <shyouhei@...> 2008/02/22

Nobuyoshi Nakada さんは書きました:

[#36081] Re: [ ruby-Bugs-17454 ] irb crash while iterating over all objects — TOYOFUKU Chikanobu <nobu_toyofuku@...> 2008/09/01

豊福です。

[#36085] Re: [ ruby-Bugs-17454 ] irb crash while iterating over all objects — Yukihiro Matsumoto <matz@...> 2008/09/01

まつもと ゆきひろです

[ruby-dev:33609] Re: cgi.rb再構築案

From: Nobuyoshi Nakada <nobu@...>
Date: 2008-02-06 02:56:06 UTC
List: ruby-dev #33609
なかだです。

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はできる。
    中田 伸悦

In This Thread