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;