From 4d43d8406ed50768789aa0b72d1b1a6fa67c6ee6 Mon Sep 17 00:00:00 2001 From: John Safranek Date: Mon, 29 Aug 2022 13:45:45 -0700 Subject: [PATCH] Wildcard Config 1. Update WMALLOCs to use the config's heap and proper DYNTYPE values. 2. Covert more STDC functions to use the wrapper macros. 3. Check some missed return values on mallocs, and make sure to free all allocated buffers. --- apps/wolfsshd/configuration.c | 42 +++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/apps/wolfsshd/configuration.c b/apps/wolfsshd/configuration.c index 6d39866e..f6e3352d 100644 --- a/apps/wolfsshd/configuration.c +++ b/apps/wolfsshd/configuration.c @@ -481,7 +481,11 @@ static int HandleInclude(WOLFSSHD_CONFIG *conf, const char *value) struct dirent *dir; WDIR d; char *path; - char *filepath = (char*)WMALLOC(PATH_MAX, NULL, 0); + char *filepath = (char*)WMALLOC(PATH_MAX, conf->heap, DYNTYPE_PATH); + + if (filepath == NULL) { + return WS_MEMORY_E; + } /* Back find the full path */ while (ptr2 != value) { @@ -492,14 +496,23 @@ static int HandleInclude(WOLFSSHD_CONFIG *conf, const char *value) } if (ptr2 != value) { - path = (char*)WMALLOC(ptr2 - value + 1, NULL, 0); - memcpy(path, value, ptr2 - value); + path = (char*)WMALLOC(ptr2 - value + 1, conf->heap, DYNTYPE_PATH); + if (path == NULL) { + WFREE(filepath, conf->heap, DYNTYPE_PATH); + return WS_MEMORY_E; + } + WMEMCPY(path, value, ptr2 - value); path[ptr2 - value] = '\0'; prefix = ptr2 + 1; prefixLen = (int)(ptr - ptr2 - 1); - } else { - path = (char*)WMALLOC(2, NULL, 0); - memcpy(path, ".", 1); + } + else { + path = (char*)WMALLOC(2, conf->heap, DYNTYPE_PATH); + if (path == NULL) { + WFREE(filepath, conf->heap, DYNTYPE_PATH); + return WS_MEMORY_E; + } + WMEMCPY(path, ".", 1); path[1] = '\0'; prefix = value; prefixLen = (int)(ptr - value); @@ -519,7 +532,8 @@ static int HandleInclude(WOLFSSHD_CONFIG *conf, const char *value) WREWINDDIR(&d); if (fileCount > 0) { - fileNames = (char**)WMALLOC(fileCount * sizeof(char*), NULL, 0); + fileNames = (char**)WMALLOC(fileCount * sizeof(char*), + conf->heap, DYNTYPE_PATH); } i = 0; @@ -572,20 +586,24 @@ static int HandleInclude(WOLFSSHD_CONFIG *conf, const char *value) ret = wolfSSHD_ConfigLoad(conf, filepath); if (ret != WS_SUCCESS) { WCLOSEDIR(&d); - WFREE(fileNames, NULL, 0); - WFREE(filepath, NULL, 0); + WFREE(fileNames, conf->heap, DYNTYPE_PATH); + WFREE(filepath, conf->heap, DYNTYPE_PATH); + WFREE(path, conf->heap, DYNTYPE_PATH); return ret; } } - WFREE(fileNames, NULL, 0); + WFREE(fileNames, conf->heap, DYNTYPE_PATH); + WFREE(path, conf->heap, DYNTYPE_PATH); WCLOSEDIR(&d); } else { /* Bad directory */ - WFREE(filepath, NULL, 0); + WFREE(filepath, conf->heap, DYNTYPE_PATH); + WFREE(path, conf->heap, DYNTYPE_PATH); return WS_BAD_ARGUMENT; } - WFREE(filepath, NULL, 0); + WFREE(filepath, conf->heap, DYNTYPE_PATH); + WFREE(path, conf->heap, DYNTYPE_PATH); #else (void)postfix; (void)prefixLen;