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) {