diff --git a/ChangeLog b/ChangeLog index e090b45cfd..1e57bfd645 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,14 +1,17 @@ +Fri Apr 11 19:00:14 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net> + + * win32/win32.c (rb_w32_stat): check arguments. [ruby-dev:20007] + [ruby-win32:535] + Fri Apr 11 15:56:08 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net> - * sample/test.rb: NaN comparison test. - -Fri Apr 11 15:37:43 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net> - * numeric.c (coerce_rescue): prevent inspected String from GC. * numeric.c (flo_eq, rb_dbl_cmp, flo_gt, flo_ge, flo_lt, flo_le, flo_eql): correct NaN comparison. (ruby-bugs:PR#744) + * sample/test.rb: NaN comparison test. + Fri Apr 11 14:48:47 2003 Yukihiro Matsumoto <matz@ruby-lang.org> * file.c (rb_stat): dereference using StringValuePtr(). diff --git a/win32/win32.c b/win32/win32.c index 004c8326d4..ab9a438ca1 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -2724,12 +2724,15 @@ int rb_w32_stat(const char *path, struct stat *st) { const char *p; - char *buf1 = ALLOCA_N(char, strlen(path) + 2); - char *buf2 = ALLOCA_N(char, MAXPATHLEN); - char *s; + char *buf1, *buf2, *s; int len; int ret; + if (!path || !st) { + errno = EFAULT; + return -1; + } + buf1 = ALLOCA_N(char, strlen(path) + 2); for (p = path, s = buf1; *p; p++, s++) { if (*p == '/') *s = '\\'; @@ -2749,6 +2752,7 @@ rb_w32_stat(const char *path, struct stat *st) strcat(buf1, "\\"); } else if (*p == '\\' || *p == ':') strcat(buf1, "."); + buf2 = ALLOCA_N(char, MAXPATHLEN); if (_fullpath(buf2, buf1, MAXPATHLEN)) { ret = stat(buf2, st); if (ret == 0) {