]> granicus.if.org Git - php/commitdiff
Avoid early allocation
authorAnatol Belski <ab@php.net>
Fri, 13 Jul 2018 05:35:33 +0000 (07:35 +0200)
committerAnatol Belski <ab@php.net>
Fri, 13 Jul 2018 05:35:33 +0000 (07:35 +0200)
win32/readdir.c

index f3d33e61d731209c24b8cd6371130258a4169057..0d46f14a77a98a12c21239381ce7b4a57e056836 100644 (file)
@@ -37,14 +37,8 @@ DIR *opendir(const char *dir)
                return NULL;
        }
 
-       dp = (DIR *) calloc(1, sizeof(DIR) + (_MAX_FNAME*5+1)*sizeof(char));
-       if (dp == NULL) {
-               return NULL;
-       }
-
        resolvedw = php_win32_ioutil_conv_any_to_w(resolved_path_buff, PHP_WIN32_CP_IGNORE_LEN, &resolvedw_len);
        if (!resolvedw) {
-               free(dp);
                return NULL;
        }
 
@@ -56,7 +50,6 @@ DIR *opendir(const char *dir)
        }
        filespecw = (wchar_t *)malloc((filespecw_len + 1)*sizeof(wchar_t));
        if (filespecw == NULL) {
-               free(dp);
                free(resolvedw);
                return NULL;
        }
@@ -73,6 +66,12 @@ DIR *opendir(const char *dir)
                filespecw[index] = L'\0';
        wcscat(filespecw, L"\\*");
 
+       dp = (DIR *) calloc(1, sizeof(DIR) + (_MAX_FNAME*5+1)*sizeof(char));
+       if (dp == NULL) {
+               free(resolvedw);
+               return NULL;
+       }
+
        if ((handle = FindFirstFileExW(filespecw, FindExInfoBasic, &(dp->fileinfo), FindExSearchNameMatch, NULL, FIND_FIRST_EX_LARGE_FETCH)) == INVALID_HANDLE_VALUE) {
                DWORD err = GetLastError();
                if (err == ERROR_NO_MORE_FILES || err == ERROR_FILE_NOT_FOUND) {