[#26468] $SAFE=1 の open-uri で redirect 時にエラー — Kazuhiko <kazuhiko@...>

かずひこです。

40 messages 2005/07/07
[#26469] Re: $SAFE=1 の open-uri で redirect 時にエラー — Tanaka Akira <akr@...17n.org> 2005/07/07

In article <m3zmsylimn.wl%kazuhiko@fdiary.net>,

[#26470] Re: $SAFE=1 の open-uri で redirect 時にエラー — Yukihiro Matsumoto <matz@...> 2005/07/07

まつもと ゆきひろです

[#26471] Re: $SAFE=1 の open-uri で redirect 時にエラー — Tanaka Akira <akr@...17n.org> 2005/07/07

In article <1120754832.716261.15867.nullmailer@x31.priv.netlab.jp>,

[#26472] Re: $SAFE=1 の open-uri で redirect 時にエラー — Yukihiro Matsumoto <matz@...> 2005/07/07

まつもと ゆきひろです

[#26475] Re: $SAFE=1 の open-uri で redirect 時にエラー — Tanaka Akira <akr@...17n.org> 2005/07/08

In article <1120762886.189058.18880.nullmailer@x31.priv.netlab.jp>,

[#26476] Re: $SAFE=1 の open-uri で redirect 時にエラー — Yukihiro Matsumoto <matz@...> 2005/07/08

まつもと ゆきひろです

[#26479] Re: $SAFE=1 の open-uri で redirect 時にエラー — Tanaka Akira <akr@...17n.org> 2005/07/08

In article <1120810939.815280.27104.nullmailer@x31.priv.netlab.jp>,

[#26483] Re: $SAFE=1 の open-uri で redirect 時にエラー — Yukihiro Matsumoto <matz@...> 2005/07/08

まつもと ゆきひろです

[#26485] Re: $SAFE=1 の open-uri で redirect 時にエラー — Shugo Maeda <shugo@...> 2005/07/08

前田です。

[#26486] Re: $SAFE=1 の open-uri で redirect 時にエラー — Yukihiro Matsumoto <matz@...> 2005/07/08

まつもと ゆきひろです

[#26525] Re: $SAFE=1 の open-uri で redirect 時にエラー — Tanaka Akira <akr@...17n.org> 2005/07/12

In article <42CF1918.5000603@ruby-lang.org>,

[#26493] can't handle \c\ — KIMURA Koichi <kbk@...>

木村です。

18 messages 2005/07/09
[#26496] Re: can't handle \c\ — "URABE Shyouhei aka. mput" <root@...> 2005/07/10

卜部でございます。

[#26574] SystemCallError.new("abc") => #<SystemCallError: unknown error - ab> — Tanaka Akira <akr@...17n.org>

次のように、メッセージの最後が切れます。

28 messages 2005/07/19
[#26576] Re: SystemCallError.new("abc") => #<SystemCallError: unknown error - ab> — Yukihiro Matsumoto <matz@...> 2005/07/19

まつもと ゆきひろです

[#26578] Re: SystemCallError.new("abc") => #<SystemCallError: unknown error - ab> — nobu@... 2005/07/19

なかだです。

[#26579] Re: SystemCallError.new("abc") => #<SystemCallError: unknown error - ab> — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/07/19

山本です。

[#26580] Re: SystemCallError.new("abc") => #<SystemCallError: unknown error - ab> — Yukihiro Matsumoto <matz@...> 2005/07/19

まつもと ゆきひろです

[#26586] Re: SystemCallError.new("abc") => #<SystemCallError: unknown error - ab> — nobuyoshi nakada <nobuyoshi.nakada@...> 2005/07/20

なかだです。

[#26587] Re: SystemCallError.new("abc") => #<SystemCallError: unknown error - ab> — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/07/20

山本です。

[#26589] Re: SystemCallError.new("abc") => #<SystemCallError: unknown error - ab> — nobu@... 2005/07/20

なかだです。

[#26597] Re: SystemCallError.new("abc") => #<SystemCallError: unknown error - ab> — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/07/21

山本です。

[#26599] Re: SystemCallError.new("abc") => #<SystemCallError: unknown error - ab> — nobuyoshi nakada <nobuyoshi.nakada@...> 2005/07/22

なかだです。

[#26628] show information of '--enable-pthread' — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

37 messages 2005/07/28
[#26632] Re: show information of '--enable-pthread' — Yukihiro Matsumoto <matz@...> 2005/07/28

まつもと ゆきひろです

[#26634] Re: show information of '--enable-pthread' — Hidetoshi NAGAI <nagai@...> 2005/07/28

永井@知能.九工大です.

[#26635] Re: show information of '--enable-pthread' — WATANABE Hirofumi <eban@...> 2005/07/28

わたなべです。

[#26645] Re: show information of '--enable-pthread' — "U.Nakamura" <usa@...> 2005/07/29

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

[#26646] Re: show information of '--enable-pthread' — Hidetoshi NAGAI <nagai@...> 2005/07/29

永井@知能.九工大です.

[#26658] Re: show information of '--enable-pthread' — Hidetoshi NAGAI <nagai@...> 2005/07/31

永井@知能.九工大です.

[#26659] Re: show information of '--enable-pthread' — Takahiro Kambe <taca@...> 2005/07/31

In message <20050731.094203.74726476.nagai@ai.kyutech.ac.jp>

[#26662] Re: show information of '--enable-pthread' — Hidetoshi NAGAI <nagai@...> 2005/07/31

永井@知能.九工大です.

[#26663] Re: show information of '--enable-pthread' — "U.Nakamura" <usa@...> 2005/07/31

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

[#26669] Re: show information of '--enable-pthread' — Hidetoshi NAGAI <nagai@...> 2005/08/01

永井@知能.九工大です.

[ruby-dev:26540] Re: WEBrick DoS vulnerability

From: Tanaka Akira <akr@...17n.org>
Date: 2005-07-15 00:24:09 UTC
List: ruby-dev #26540
In article <20050713.113725.432836850.gotoyuzo@sawara.priv.tokyo.netlab.jp>,
  GOTOU Yuuzou <gotoyuzo@notwork.org> writes:

> sysreadを使っているnet/protocol.rbやnet/telnet.rbなどに修正
> が必要になりそうですね。添付ライブラリはどうとでもなるのでしょ
> うが、ユーザのコードはそうではないので、デフォルトで
> non-blocking modeにするのはよしたほうがいいと思います。

前田さんの [ruby-dev:26492] の案で IO#read 以外のメソッドにも手を入れ
ることにすればデフォルトで non-blockingでもユーザのコードからはその違
いが見えないようにすることは可能でしょ。問題は、洩れなく完璧にできるの
かというところと、そこまでするのはやりすぎな感じがする、というところで
すが。

私は 1.8 でデフォルトで non-blocking にするのはお薦めしないのですが、
それでもできればデフォルトで write がブロックしないようにできればいい
とは思っているわけです。で、思い付いて security@ruby-lang.org のほうに
送ったのが、write を PIPE_BUF 毎に分割することによって non-blocking に
しなくても、環境によってはブロックしなくなるかもしれないという案ですが、
反応がありませんねぇ。

Index: io.c
===================================================================
RCS file: /src/ruby/io.c,v
retrieving revision 1.246.2.74
diff -u -p -r1.246.2.74 io.c
--- io.c	12 May 2005 08:12:39 -0000	1.246.2.74
+++ io.c	15 Jul 2005 00:03:44 -0000
@@ -394,7 +394,7 @@ io_fwrite(str, fptr)
     VALUE str;
     OpenFile *fptr;
 {
-    long len, n, r, offset = 0;
+    long len, n, r, l, offset = 0;
     FILE *f = GetWriteFile(fptr);
 
     len = RSTRING(str)->len;
@@ -404,8 +404,24 @@ io_fwrite(str, fptr)
 	if (!rb_thread_fd_writable(fileno(f))) {
 	    rb_io_check_closed(fptr);
 	}
+        if (!(fptr->mode & FMODE_WSPLIT_INITIALIZED)) {
+            struct stat buf;
+            if (fstat(fileno(f), &buf) == 0 &&
+                !(S_ISREG(buf.st_mode) ||
+                  S_ISDIR(buf.st_mode)) &&
+                (r = fcntl(fileno(f), F_GETFL)) != -1 &&
+                !(r & O_NONBLOCK)) {
+                fptr->mode |= FMODE_WSPLIT;
+            }
+            fptr->mode |= FMODE_WSPLIT_INITIALIZED;
+        }
       retry:
-	r = write(fileno(f), RSTRING(str)->ptr+offset, n);
+        l = n;
+        if (!rb_thread_critical && !rb_thread_alone() &&
+            (fptr->mode & FMODE_WSPLIT) && PIPE_BUF < l) {
+            l = PIPE_BUF;
+        }
+	r = write(fileno(f), RSTRING(str)->ptr+offset, l);
         if (r == n) return len;
         if (0 <= r) {
             offset += r;
Index: rubyio.h
===================================================================
RCS file: /src/ruby/rubyio.h,v
retrieving revision 1.23.2.6
diff -u -p -r1.23.2.6 rubyio.h
--- rubyio.h	21 Jan 2005 00:31:16 -0000	1.23.2.6
+++ rubyio.h	15 Jul 2005 00:03:44 -0000
@@ -39,6 +39,8 @@ typedef struct OpenFile {
 #define FMODE_SYNC      8
 #define FMODE_WBUF     16
 #define FMODE_RBUF     32
+#define FMODE_WSPLIT  0x200
+#define FMODE_WSPLIT_INITIALIZED  0x400
 
 #define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr)

> もとの話題であるWEBrickがwriteでブロック問題については、
> WEBrick側でソケットをnon-blocking modoにすることで対処しよう
> と思います。

それはそれでいいんじゃないかと思います。
(仮に上のパッチが入っても、non-blocking mode になっていれば write を分
割しなくて済むし、socket が select で writable になっても PIPE_BUF 未
満しか書き込めない環境があったとしても対応できるので)

>> % ./ruby -v
>> ruby 1.9.0 (2005-07-10) [i686-linux]
>> % ./ruby -rsocket -rio/nonblock -e '
>> s1, s2 = UNIXSocket.pair
>> s1.nonblock = true         
>> p s1.send("a" * 1000000, 0)
>> '
>> 65280
>
> バッファがいっぱいの状態でもう一度sendするとブロックするよう
> ですね。

ふむ。それは知りませんでした。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread