[#26430] compile error of missing/*.c — nobuyoshi nakada <nobuyoshi.nakada@...>
なかだです。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
こんにちは、なかむら(う)です。
[#26443] cvs [diff aborted]: cannot open file .cvsignore for comparing: No such file or directory — Tanaka Akira <akr@...17n.org>
最近、cvs diff に -k option を付けると、エラーになる (ことがある) ので
[#26463] String#each_byte and String#each_char — "NARUSE, Yui" <naruse@...>
成瀬です。
[#26468] $SAFE=1 の open-uri で redirect 時にエラー — Kazuhiko <kazuhiko@...>
かずひこです。
In article <m3zmsylimn.wl%kazuhiko@fdiary.net>,
まつもと ゆきひろです
In article <1120754832.716261.15867.nullmailer@x31.priv.netlab.jp>,
まつもと ゆきひろです
In article <1120762886.189058.18880.nullmailer@x31.priv.netlab.jp>,
まつもと ゆきひろです
In article <1120810939.815280.27104.nullmailer@x31.priv.netlab.jp>,
まつもと ゆきひろです
前田です。
まつもと ゆきひろです
In article <42CF1918.5000603@ruby-lang.org>,
前田です。
In article <42D7C230.7030509@ruby-lang.org>,
In article <42DDBA82.7030307@ruby-lang.org>,
[#26493] can't handle \c\ — KIMURA Koichi <kbk@...>
木村です。
卜部でございます。
木村です。
[#26508] rmdir(2) on windows doesn't set ENOTDIR — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
まつもと ゆきひろです
山本です。
山本です。
[#26530] removing static variables in parse.y — nobuyoshi nakada <nobuyoshi.nakada@...>
なかだです。
[#26566] cannot compile io.c on windows — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
[#26574] SystemCallError.new("abc") => #<SystemCallError: unknown error - ab> — Tanaka Akira <akr@...17n.org>
次のように、メッセージの最後が切れます。
まつもと ゆきひろです
なかだです。
山本です。
まつもと ゆきひろです
なかだです。
山本です。
なかだです。
山本です。
なかだです。
なかだです。
まつもと ゆきひろです
山本です。
この変更があってからだと思うのですが、リンカが以下のように警告を発するよ
卜部です。自己レス
At Sat, 30 Jul 2005 02:32:38 +0900,
[#26594] test_s_open_lock failed on Solaris — Tanaka Akira <akr@...17n.org>
次のように、Solaris で test_s_open_lock が失敗します。
[#26618] Re: [ruby-cvs] ruby/ext/socket, ruby, ruby: * ext/socket/socket.c (ruby_connect): break immediately if a — Tanaka Akira <akr@...17n.org>
In article <20050728015209.0F30DC6734@lithium.ruby-lang.org>,
In article <1122518643.429222.1408.nullmailer@x31.priv.netlab.jp>,
[#26623] Ruby2.0BlockParameterNotation — SASADA Koichi <ko1@...>
ささだです。
まつもと ゆきひろです
[#26628] show information of '--enable-pthread' — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
わたなべです。
こんにちは、なかむら(う)です。
永井@知能.九工大です.
永井@知能.九工大です.
In message <20050731.094203.74726476.nagai@ai.kyutech.ac.jp>
永井@知能.九工大です.
こんにちは、なかむら(う)です。
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
なかだです。
永井@知能.九工大です.
永井@知能.九工大です.
こんにちは、なかむら(う)です。
永井@知能.九工大です.
こんにちは、なかむら(う)です。
こんにちは、なかむら(う)です。
[#26639] SEGV at zsuper with anonymous rest args. — nobu@...
なかだです。
まつもと ゆきひろです
山本です。
なかだです。
[ruby-dev:26540] Re: WEBrick DoS vulnerability
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]