[Gauche-devel-jp] Re: [help] sys-normalize-pathname と sys-chdir

Back to archive index

Shiro Kawai shiro****@lava*****
2005年 10月 1日 (土) 05:49:31 JST


バッファの大きさが1バイト足らなかったのが原因で、Gaucheが
メモリを壊してました。とりあえずのパッチを以下につけます。
;; たまたまここで確保したバッファと同じサイズの文字列が
;; 隣接してアロケートされていたために発覚したものです。
;; 見つけて頂いてありがたいです。

ここのコードはかなり汚いんで、バグの温床になりそうです。
いずれScmDStringを使って全面的に書き直そうと思います。

--shiro


===================================================================
RCS file: /cvsroot/gauche/Gauche/src/system.c,v
retrieving revision 1.67
diff -u -r1.67 system.c
--- src/system.c	30 Jun 2005 09:57:41 -0000	1.67
+++ src/system.c	30 Sep 2005 20:34:56 -0000
@@ -296,7 +296,7 @@
         srcp = p;
         SKIP_SLASH;
         dirlen = strlen(pwd->pw_dir);
-        buf = SCM_NEW_ATOMIC2(char*, dirlen+size+1);
+        buf = SCM_NEW_ATOMIC2(char*, dirlen+size+2);
         strcpy(buf, pwd->pw_dir);
         dstp = buf + dirlen;
         if (*(dstp-1) != '/') { *dstp++ = '/'; *(dstp+1) = '\0'; }
@@ -314,7 +314,7 @@
             Scm_SysError("couldn't get current directory.");
         }
         dirlen = strlen(p);
-        buf = SCM_NEW_ATOMIC2(char*, dirlen+size+1);
+        buf = SCM_NEW_ATOMIC2(char*, dirlen+size+2);
         strcpy(buf, p);
         dstp = buf + dirlen;
         if (*(dstp-1) != '/' && *(dstp-1) != '\\') *dstp++ = SEPARATOR;



Gauche-devel-jp メーリングリストの案内
Back to archive index