msvc: opendir: allocate enough memory
authorErik Faye-Lund <kusmabite@gmail.com>
Tue, 23 Nov 2010 18:38:25 +0000 (19:38 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 24 Nov 2010 00:06:46 +0000 (16:06 -0800)
The defintion of DIR expects the allocating function to extend
dd_name by over-allocating. This is not currently done in our
implementation of opendir. Fix this.

Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
compat/msvc.c

index d6096e4..c195365 100644 (file)
@@ -5,15 +5,14 @@
 
 DIR *opendir(const char *name)
 {
-       int len;
+       int len = strlen(name);
        DIR *p;
-       p = malloc(sizeof(DIR));
+       p = malloc(sizeof(DIR) + len + 2);
        if (!p)
                return NULL;
 
-       memset(p, 0, sizeof(DIR));
-       strncpy(p->dd_name, name, PATH_MAX);
-       len = strlen(p->dd_name);
+       memset(p, 0, sizeof(DIR) + len + 2);
+       strcpy(p->dd_name, name);
        p->dd_name[len] = '/';
        p->dd_name[len+1] = '*';