forked from wolfSSL/wolfssl
ssl: refactoring CyaSSL_CTX_load_verify_locations to reduce stack usage:
--- variable name moved to the heap (256 bytes saved)
This commit is contained in:
50
src/ssl.c
50
src/ssl.c
@ -2833,15 +2833,28 @@ int CyaSSL_CTX_load_verify_locations(CYASSL_CTX* ctx, const char* file,
|
|||||||
#ifdef USE_WINDOWS_API
|
#ifdef USE_WINDOWS_API
|
||||||
WIN32_FIND_DATAA FindFileData;
|
WIN32_FIND_DATAA FindFileData;
|
||||||
HANDLE hFind;
|
HANDLE hFind;
|
||||||
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
char* name = NULL;
|
||||||
|
#else
|
||||||
char name[MAX_FILENAME_SZ];
|
char name[MAX_FILENAME_SZ];
|
||||||
|
#endif
|
||||||
|
|
||||||
XMEMSET(name, 0, sizeof(name));
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
name = (char*)XMALLOC(MAX_FILENAME_SZ, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (name == NULL)
|
||||||
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
XMEMSET(name, 0, MAX_FILENAME_SZ);
|
||||||
XSTRNCPY(name, path, MAX_FILENAME_SZ - 4);
|
XSTRNCPY(name, path, MAX_FILENAME_SZ - 4);
|
||||||
XSTRNCAT(name, "\\*", 3);
|
XSTRNCAT(name, "\\*", 3);
|
||||||
|
|
||||||
hFind = FindFirstFileA(name, &FindFileData);
|
hFind = FindFirstFileA(name, &FindFileData);
|
||||||
if (hFind == INVALID_HANDLE_VALUE) {
|
if (hFind == INVALID_HANDLE_VALUE) {
|
||||||
CYASSL_MSG("FindFirstFile for path verify locations failed");
|
CYASSL_MSG("FindFirstFile for path verify locations failed");
|
||||||
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(name, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
return BAD_PATH_ERROR;
|
return BAD_PATH_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2852,38 +2865,55 @@ int CyaSSL_CTX_load_verify_locations(CYASSL_CTX* ctx, const char* file,
|
|||||||
XSTRNCAT(name, FindFileData.cFileName, MAX_FILENAME_SZ/2);
|
XSTRNCAT(name, FindFileData.cFileName, MAX_FILENAME_SZ/2);
|
||||||
|
|
||||||
ret = ProcessFile(ctx, name, SSL_FILETYPE_PEM, CA_TYPE, NULL,0,
|
ret = ProcessFile(ctx, name, SSL_FILETYPE_PEM, CA_TYPE, NULL,0,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
} while (ret == SSL_SUCCESS && FindNextFileA(hFind, &FindFileData));
|
} while (ret == SSL_SUCCESS && FindNextFileA(hFind, &FindFileData));
|
||||||
|
|
||||||
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(name, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
FindClose(hFind);
|
FindClose(hFind);
|
||||||
#elif !defined(NO_CYASSL_DIR)
|
#elif !defined(NO_CYASSL_DIR)
|
||||||
struct dirent* entry;
|
struct dirent* entry;
|
||||||
DIR* dir = opendir(path);
|
DIR* dir = opendir(path);
|
||||||
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
char* name = NULL;
|
||||||
|
#else
|
||||||
|
char name[MAX_FILENAME_SZ];
|
||||||
|
#endif
|
||||||
|
|
||||||
if (dir == NULL) {
|
if (dir == NULL) {
|
||||||
CYASSL_MSG("opendir path verify locations failed");
|
CYASSL_MSG("opendir path verify locations failed");
|
||||||
return BAD_PATH_ERROR;
|
return BAD_PATH_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
name = (char*)XMALLOC(MAX_FILENAME_SZ, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (name == NULL)
|
||||||
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
while ( ret == SSL_SUCCESS && (entry = readdir(dir)) != NULL) {
|
while ( ret == SSL_SUCCESS && (entry = readdir(dir)) != NULL) {
|
||||||
char name[MAX_FILENAME_SZ];
|
|
||||||
struct stat s;
|
struct stat s;
|
||||||
|
|
||||||
XMEMSET(name, 0, sizeof(name));
|
XMEMSET(name, 0, MAX_FILENAME_SZ);
|
||||||
XSTRNCPY(name, path, MAX_FILENAME_SZ/2 - 2);
|
XSTRNCPY(name, path, MAX_FILENAME_SZ/2 - 2);
|
||||||
XSTRNCAT(name, "/", 1);
|
XSTRNCAT(name, "/", 1);
|
||||||
XSTRNCAT(name, entry->d_name, MAX_FILENAME_SZ/2);
|
XSTRNCAT(name, entry->d_name, MAX_FILENAME_SZ/2);
|
||||||
|
|
||||||
if (stat(name, &s) != 0) {
|
if (stat(name, &s) != 0) {
|
||||||
CYASSL_MSG("stat on name failed");
|
CYASSL_MSG("stat on name failed");
|
||||||
closedir(dir);
|
ret = BAD_PATH_ERROR;
|
||||||
return BAD_PATH_ERROR;
|
} else if (s.st_mode & S_IFREG)
|
||||||
}
|
|
||||||
if (s.st_mode & S_IFREG) {
|
|
||||||
ret = ProcessFile(ctx, name, SSL_FILETYPE_PEM, CA_TYPE, NULL,0,
|
ret = ProcessFile(ctx, name, SSL_FILETYPE_PEM, CA_TYPE, NULL,0,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(name, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user