summaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-04-11 10:02:37 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-04-11 10:02:37 +0000
commit6e4a83c0a3d631593260b0b9c75f8ea08a44e6be (patch)
tree95795093fb85be99d56bcbc1af7918bcf4103b62 /win32
parentfd0fdbe90880a202b8570760a81e6952e6980170 (diff)
* win32/win32.c (rb_w32_stat): check arguments. [ruby-dev:20007]
[ruby-win32:535] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3673 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'win32')
-rw-r--r--win32/win32.c10
1 files changed, 7 insertions, 3 deletions
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) {