[#20036] Re: Roundoff problem with Float and Marshal — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

16 messages 2003/04/18
[#20045] Re: Roundoff problem with Float and Marshal — nobu.nakada@... 2003/04/20

なかだです。

[#20063] Re: Roundoff problem with Float and Marshal — matz@... (Yukihiro Matsumoto) 2003/04/22

まつもと ゆきひろです

[#20097] jcode.rb — akira yamada / やまだあきら <akira@...>

25 messages 2003/04/26
[#20098] Re: jcode.rb — matz@... (Yukihiro Matsumoto) 2003/04/27

まつもと ゆきひろです

[#20105] Re: jcode.rb — WATANABE Hirofumi <eban@...> 2003/04/28

わたなべです。

[#20108] Re: jcode.rb — matz@... (Yukihiro Matsumoto) 2003/04/28

まつもと ゆきひろです

[ruby-dev:20026] Re: File::expand_path amok

From: nobu.nakada@...
Date: 2003-04-14 10:12:55 UTC
List: ruby-dev #20026
なかだです。

At Mon, 14 Apr 2003 18:35:12 +0900,
WATANABE Hirofumi wrote:
> BUFCHECKでrootも更新しないと
> 			 if (!(b = strrdirsep(root))) {
> 			     *p = '/';
> 			 }
> 			 else {
> 			     p = b;
> 			 }
> の p = b; でまずいんじゃないかなあ。

たしかに。

しかし、rootが必要なのって
    while (*s) {
のループに入ってからだけなのでこれでどうでしょう。


Index: file.c
===================================================================
RCS file: //sharui/cvs/ruby/src/ruby/file.c,v
retrieving revision 1.143
diff -u -2 -p -r1.143 file.c
--- file.c	14 Apr 2003 09:04:43 -0000	1.143
+++ file.c	14 Apr 2003 10:09:00 -0000
@@ -1493,7 +1493,7 @@ chompdirsep(path)
 }
 
-#define BUFCHECK(cond) while (cond) {\
+#define BUFCHECK(cond) if (cond) {
     long bdiff = p - buf;\
-    buflen *= 2;\
+    do {buflen *= 2;} while (cond);\
     rb_str_resize(result, buflen);\
     buf = RSTRING(result)->ptr;\
@@ -1678,5 +1678,7 @@ file_expand_path(fname, dname, result)
 #endif
 	    if (s > b) {
+		long rootdiff = root - buf;
 		BUFCHECK(p + (s-b+1) >= pend);
+		root = buf + rootdiff;
 		memcpy(++p, b, s-b);
 		p += s-b;


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread