[#24661] MANIFEST — WATANABE Hirofumi <eban@...>
わたなべです。
[#24670] IO.popen(["echo", "aaa"]) failure — Tanaka Akira <akr@...17n.org>
make test-all で昨日は起きなかったエラーが出るので調べたところ、
わたなべです。
まつもと ゆきひろです
[#24672] gc.c: structure has no member named `IA64_BSPSTORE' — akira yamada / やまだあきら <akira@...>
Linux/ia64環境ではgc.cで
[#24698] NKF(nkf2)を1.8ブランチに入れました — "NARUSE, Yui" <naruse@...>
naruseです。
こんにちは。
naruseです。
こんにちは。
[#24708] String#gsub causes core dump — Tanaka Akira <akr@...17n.org>
次のようにすると core を吐きます。
[#24716] Re: [ruby-cvs] ruby/lib, ruby/ext/socket, ruby: * string.c (str_gsub): should have removed rb_str_unlocktmp(str). — Tanaka Akira <akr@...17n.org>
In article <20041104234342.9C575C6718@lithium.ruby-lang.org>,
まつもと ゆきひろです
[#24720] メール関係ライブラリの標準添付について — MoonWolf <moonwolf@...>
MoonWolfです。
まつもと ゆきひろです
MoonWolfです。
高橋征義です。
naruseです。
[#24728] sysvipcをlibに取り込みたい — MoonWolf <moonwolf@...>
MoonWolfです。
[#24740] Ruby 1.8.2 preview3 — Yukihiro Matsumoto <matz@...>
Hello,
[#24748] "\000\000\000\001".unpack("N") returns [0] — GOTOU Yuuzou <gotoyuzo@...>
Ruby 1.8で、Ruby 1.9のtest/ruby/test_pack.rbを試すとエラーに
まつもと ゆきひろです
こんにちは、なかむら(う)です。
こんにちは、なかむら(う)です。
[#24771] Re: [ruby-cvs] ruby/lib, ruby/ext/socket, ruby: * dir.c (rb_glob2): do not allocate buffer from heap to avoid — nobu@...
なかだです。
まつもと ゆきひろです
まつもと ゆきひろです
[#24781] リリーススクリプト — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
[#24785] cannot require tk — Minero Aoki <aamine@...>
青木です。
[#24804] Re: まつもとさんの負担を減らすために、何ができるだろう — "URABE Shyouhei aka.mput" <root@...>
mput です。 ruby-dev に移動します。
In article <2D6284E3-351D-11D9-B7EF-000393735AAE@mput.dip.jp>,
mput です。
高橋征義です。
mput です。
[#24828] test_logger が -r gtk2 の時に失敗 — Kazuhiko <kazuhiko@...>
かずひこです。
まつもと ゆきひろです
[#24834] Process.getrlimit and Process.setrlimit — Tanaka Akira <akr@...17n.org>
Process.getrlimit と Process.setrlimit が欲しいので実装してみました。
なかだです。
In article <20041117.151309.21595195.taca@back-street.net>,
西山和広です。
In article <20041117154831.080F.ZN@mbf.nifty.com>,
まつもと ゆきひろです
In article <1100706032.176617.3333.nullmailer@x31.priv.netlab.jp>,
まつもと ゆきひろです
In article <1100749113.608312.10170.nullmailer@x31.priv.netlab.jp>,
[#24848] ERROR: install-doc — WATANABE Hirofumi <eban@...>
わたなべです。
[#24850] ChangeLog for — Tanaka Akira <akr@...17n.org>
[ruby-dev:24635] が commit log にも ChangeLog にも記述されないで取り込
In article <1100493656.630060.15787.nullmailer@x31.priv.netlab.jp>,
順序を変えて引用しています。
[#24873] A Float-related race in GC? — akira yamada / やまだあきら <akira@...>
[#24922] Re: imported Oni Guruma 3.4.0 — "K.Kosako" <kosako@...>
> 以下のパッチで segv はしなくなったのですが make test に失敗しました。
[#24924] [Oniguruma] patch for 3.4.0 — "K.Kosako" <kosako@...>
3.4.0のimport後、今日までに発見された
まつもと ゆきひろです
[#24965] sync and stdio buffering — Tanaka Akira <akr@...17n.org>
ちょっとした思いつきなのですが、
In article <87hdnc8pcq.fsf@serein.a02.aist.go.jp>,
まつもと ゆきひろです
In article <1101525226.648183.765.nullmailer@x31.priv.netlab.jp>,
In article <87653s7ye5.fsf@serein.a02.aist.go.jp>,
まつもと ゆきひろです
[#24974] Re: [ruby-cvs] ruby: * io.c (rb_io_initialize): should retrieve flags from copying file — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
まつもと ゆきひろです
[#24981] jcode tr? : from.upto(to) { |c| a.push c } — Fumitoshi UKAI <ukai@...>
migemo で http://bugs.debian.org/283192 というバグレポートをうけました。
[#24993] rb_io_sysread dumps core [BUG] rb_sys_fail() - errno == 0 — Tietew <tietew-ml-ruby-dev@...>
ソケットとスレッドを大量に使うアプリ(具体的には IRCbot です)を
なかだです。
まつもと ゆきひろです
[#25003] IO#flush dumps core again — Tanaka Akira <akr@...17n.org>
次のようにすると core を吐きます。
なかだです。
まつもと ゆきひろです
In article <1101836040.635395.27476.nullmailer@x31.priv.netlab.jp>,
In article <1101878558.979715.1359.nullmailer@x31.priv.netlab.jp>,
まつもと ゆきひろです
In article <1101888165.570792.4192.nullmailer@x31.priv.netlab.jp>,
In article <1102293033.356112.2288.nullmailer@x31.priv.netlab.jp>,
まつもと ゆきひろです
In article <1102324875.961165.10916.nullmailer@x31.priv.netlab.jp>,
In article <87sm6jznqj.fsf@serein.a02.aist.go.jp>,
[ruby-dev:24998] Re: rb_io_sysread dumps core [BUG] rb_sys_fail() - errno == 0
なかだです。
At Tue, 30 Nov 2004 16:25:22 +0900,
Yukihiro Matsumoto wrote in [ruby-dev:24997]:
> |TRAP_ENDではerrnoを保存しているので、それはないはずです。一つの
> |可能性としては、rb_io_sysread()ではrb_sys_fail()の直前で
> |rb_str_resize()を呼んでいるので、その中でクリアされているとか。
>
> よく見るとどのrb_str_resize()も必須ではないようなので、削除
> しちゃいましょうか。
どうせ例外で通知されるので空にする必要もない、ということでしょ
うか。それでも(ドキュメントを直せば)問題はないんじゃないかと思
いますが、なんでそうしてたんでしたっけ、とcommit logを調べてみ
ると[ruby-bugs-ja PR#408]が最初のようです。
| 1.8 の IO#read(len, buf) (と、IO#sysread)の以下の振舞いはちょっ
| と不揃いに思えます。戻りが nil の場合は buf も空にしてしまう
| のが簡単?
|
| * sysread() はあらかじめ buf を len バイトに切り詰めることも
| するが、read() はしない。
|
| * ファイルが空の場合、buf は最初のサイズ調整以外に変更されな
| い。ただし、read() の場合は(おそらく仕方なく)先頭に "\0"
| が入ってしまう。
|
| io = File.open("/dev/null")
|
| buf = "x" * 20;
| p io.read(10,buf)
| p buf
|
| buf = "x" * 20;
| p io.sysread(10,buf) rescue nil
| p buf
|
| => ruby 1.8.0 (2003-03-12) [i586-linux]
| nil
| "\000xxxxxxxxxxxxxxxxxxx"
| "xxxxxxxxxx"
前者に関しては、そもそも最初に切り詰める必要はなさそうな気がし
ます。後者は、io_fread()でnul terminateすること自体不要そうです。
Index: io.c
===================================================================
RCS file: /cvs/ruby/src/ruby/io.c,v
retrieving revision 1.338
diff -u -2 -p -r1.338 io.c
--- io.c 29 Nov 2004 15:58:18 -0000 1.338
+++ io.c 30 Nov 2004 08:38:16 -0000
@@ -1010,5 +1010,4 @@ io_fread(ptr, len, fptr)
if (len == n) return 0;
}
- *ptr = '\0';
break;
}
@@ -1087,5 +1086,4 @@ read_all(fptr, siz, str)
rb_str_unlocktmp(str);
if (n == 0 && bytes == 0) {
- rb_str_resize(str,0);
if (!fptr->f) break;
if (feof(fptr->f)) break;
@@ -1165,5 +1163,5 @@ io_readpartial(argc, argv, io)
OpenFile *fptr;
VALUE length, str;
- long n, len;
+ long n, len, olen;
rb_scan_args(argc, argv, "11", &length, &str);
@@ -1174,10 +1172,11 @@ io_readpartial(argc, argv, io)
if (NIL_P(str)) {
- str = rb_str_new(0, len);
+ str = rb_str_new(0, olen = len);
}
else {
StringValue(str);
rb_str_modify(str);
- rb_str_resize(str, len);
+ olen = RSTRING(str)->len;
+ if (len > olen) rb_str_resize(str, olen = len);
}
OBJ_TAINT(str);
@@ -1190,5 +1189,5 @@ io_readpartial(argc, argv, io)
READ_CHECK(fptr->f);
- if (RSTRING(str)->len != len) {
+ if (RSTRING(str)->len != olen) {
modified:
rb_raise(rb_eRuntimeError, "buffer string modified");
@@ -1197,5 +1196,5 @@ io_readpartial(argc, argv, io)
if (n <= 0) {
again:
- if (RSTRING(str)->len != len) goto modified;
+ if (RSTRING(str)->len != olen) goto modified;
TRAP_BEG;
n = read(fileno(fptr->f), RSTRING(str)->ptr, len);
@@ -1204,5 +1203,4 @@ io_readpartial(argc, argv, io)
if (rb_io_wait_readable(fileno(fptr->f)))
goto again;
- rb_str_resize(str, 0);
rb_sys_fail(fptr->path);
}
@@ -1237,5 +1235,5 @@ io_read(argc, argv, io)
{
OpenFile *fptr;
- long n, len;
+ long n, len, olen;
VALUE length, str;
@@ -1254,10 +1252,11 @@ io_read(argc, argv, io)
if (NIL_P(str)) {
- str = rb_tainted_str_new(0, len);
+ str = rb_tainted_str_new(0, olen = len);
}
else {
StringValue(str);
rb_str_modify(str);
- rb_str_resize(str,len);
+ olen = RSTRING(str)->len;
+ if (len > olen) rb_str_resize(str, olen = len);
}
@@ -1265,9 +1264,12 @@ io_read(argc, argv, io)
rb_io_check_readable(fptr);
if (feof(fptr->f)) return Qnil;
- if (len == 0) return str;
+ if (len == 0) {
+ rb_str_resize(str, 0);
+ return str;
+ }
rb_str_locktmp(str);
READ_CHECK(fptr->f);
- if (RSTRING(str)->len != len) {
+ if (RSTRING(str)->len != olen) {
rb_raise(rb_eRuntimeError, "buffer string modified");
}
@@ -1275,11 +1277,9 @@ io_read(argc, argv, io)
rb_str_unlocktmp(str);
if (n == 0) {
- rb_str_resize(str,0);
if (!fptr->f) return Qnil;
if (feof(fptr->f)) return Qnil;
if (len > 0) rb_sys_fail(fptr->path);
}
- RSTRING(str)->len = n;
- RSTRING(str)->ptr[n] = '\0';
+ rb_str_resize(str, n);
OBJ_TAINT(str);
@@ -2301,5 +2301,5 @@ rb_io_sysread(argc, argv, io)
VALUE len, str;
OpenFile *fptr;
- long n, ilen;
+ long n, ilen, olen;
rb_scan_args(argc, argv, "11", &len, &str);
@@ -2307,12 +2307,16 @@ rb_io_sysread(argc, argv, io)
if (NIL_P(str)) {
- str = rb_str_new(0, ilen);
+ str = rb_str_new(0, olen = ilen);
}
else {
StringValue(str);
rb_str_modify(str);
- rb_str_resize(str, ilen);
+ olen = RSTRING(str)->len;
+ if (ilen > olen) rb_str_resize(str, olen = ilen);
+ }
+ if (ilen == 0) {
+ rb_str_resize(str, 0);
+ return str;
}
- if (ilen == 0) return str;
GetOpenFile(io, fptr);
@@ -2327,5 +2331,5 @@ rb_io_sysread(argc, argv, io)
rb_thread_wait_fd(fileno(fptr->f));
rb_io_check_closed(fptr);
- if (RSTRING(str)->len != ilen) {
+ if (RSTRING(str)->len != olen) {
rb_raise(rb_eRuntimeError, "buffer string modified");
}
@@ -2336,9 +2340,7 @@ rb_io_sysread(argc, argv, io)
rb_str_unlocktmp(str);
if (n == -1) {
- rb_str_resize(str, 0);
rb_sys_fail(fptr->path);
}
if (n == 0 && ilen > 0) {
- rb_str_resize(str, 0);
rb_eof_error();
}
@@ -2906,6 +2908,8 @@ pipe_open(argc, argv, mode)
if (modef & FMODE_WRITABLE) close(arg.pw[0]);
if (pid == -1) {
+ int saved_errno = errno;
if (modef & FMODE_READABLE) close(arg.pr[0]);
if (modef & FMODE_WRITABLE) close(arg.pw[1]);
+ errno = saved_errno;
rb_sys_fail(cmd);
}
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦