From: Viktor Szakats Date: Mon, 1 Dec 2025 14:25:26 +0000 (+0100) Subject: curlx: use curlx allocators in non-memdebug builds (Windows) X-Git-Tag: rc-8_18_0-1~57 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a3fcd80de4b1fe00c8832713afadfc6ad8f391b3;p=thirdparty%2Fcurl.git curlx: use curlx allocators in non-memdebug builds (Windows) To limit raw allocators to `CURLDEBUG` (memdebug/TrackMemory) Windows UNICODE builds. Closes #19788 --- diff --git a/lib/curlx/fopen.c b/lib/curlx/fopen.c index caf4978af1..1838b7de8b 100644 --- a/lib/curlx/fopen.c +++ b/lib/curlx/fopen.c @@ -100,8 +100,7 @@ static bool fix_excessive_path(const TCHAR *in, TCHAR **out) goto cleanup; if(!needed || needed >= max_path_len) goto cleanup; - /* !checksrc! disable BANNEDFUNC 1 */ - ibuf = malloc(needed * sizeof(wchar_t)); + ibuf = CURLX_MALLOC(needed * sizeof(wchar_t)); if(!ibuf) goto cleanup; if(mbstowcs_s(&count, ibuf, needed, in, needed - 1)) @@ -122,8 +121,7 @@ static bool fix_excessive_path(const TCHAR *in, TCHAR **out) /* skip paths that are not excessive and do not need modification */ if(needed <= MAX_PATH) goto cleanup; - /* !checksrc! disable BANNEDFUNC 1 */ - fbuf = malloc(needed * sizeof(wchar_t)); + fbuf = CURLX_MALLOC(needed * sizeof(wchar_t)); if(!fbuf) goto cleanup; count = (size_t)GetFullPathNameW(in_w, (DWORD)needed, fbuf, NULL); @@ -156,19 +154,16 @@ static bool fix_excessive_path(const TCHAR *in, TCHAR **out) if(needed > max_path_len) goto cleanup; - /* !checksrc! disable BANNEDFUNC 1 */ - temp = malloc(needed * sizeof(wchar_t)); + temp = CURLX_MALLOC(needed * sizeof(wchar_t)); if(!temp) goto cleanup; if(wcsncpy_s(temp, needed, L"\\\\?\\UNC\\", 8)) { - /* !checksrc! disable BANNEDFUNC 1 */ - free(temp); + CURLX_FREE(temp); goto cleanup; } if(wcscpy_s(temp + 8, needed, fbuf + 2)) { - /* !checksrc! disable BANNEDFUNC 1 */ - free(temp); + CURLX_FREE(temp); goto cleanup; } } @@ -178,25 +173,21 @@ static bool fix_excessive_path(const TCHAR *in, TCHAR **out) if(needed > max_path_len) goto cleanup; - /* !checksrc! disable BANNEDFUNC 1 */ - temp = malloc(needed * sizeof(wchar_t)); + temp = CURLX_MALLOC(needed * sizeof(wchar_t)); if(!temp) goto cleanup; if(wcsncpy_s(temp, needed, L"\\\\?\\", 4)) { - /* !checksrc! disable BANNEDFUNC 1 */ - free(temp); + CURLX_FREE(temp); goto cleanup; } if(wcscpy_s(temp + 4, needed, fbuf)) { - /* !checksrc! disable BANNEDFUNC 1 */ - free(temp); + CURLX_FREE(temp); goto cleanup; } } - /* !checksrc! disable BANNEDFUNC 1 */ - free(fbuf); + CURLX_FREE(fbuf); fbuf = temp; } @@ -206,8 +197,7 @@ static bool fix_excessive_path(const TCHAR *in, TCHAR **out) goto cleanup; if(!needed || needed >= max_path_len) goto cleanup; - /* !checksrc! disable BANNEDFUNC 1 */ - obuf = malloc(needed); + obuf = CURLX_MALLOC(needed); if(!obuf) goto cleanup; if(wcstombs_s(&count, obuf, needed, fbuf, needed - 1)) @@ -222,12 +212,10 @@ static bool fix_excessive_path(const TCHAR *in, TCHAR **out) #endif cleanup: - /* !checksrc! disable BANNEDFUNC 1 */ - free(fbuf); + CURLX_FREE(fbuf); #ifndef _UNICODE - /* !checksrc! disable BANNEDFUNC 2 */ - free(ibuf); - free(obuf); + CURLX_FREE(ibuf); + CURLX_FREE(obuf); #endif return *out ? true : false; } @@ -269,8 +257,7 @@ int curlx_win32_open(const char *filename, int oflag, ...) errno = _sopen_s(&result, target, oflag, _SH_DENYNO, pmode); #endif - /* !checksrc! disable BANNEDFUNC 1 */ - free(fixed); + CURLX_FREE(fixed); return result; } @@ -303,8 +290,7 @@ FILE *curlx_win32_fopen(const char *filename, const char *mode) errno = fopen_s(&result, target, mode); #endif - /* !checksrc! disable BANNEDFUNC 1 */ - free(fixed); + CURLX_FREE(fixed); return result; } @@ -342,8 +328,7 @@ FILE *curlx_win32_freopen(const char *filename, const char *mode, FILE *fp) errno = freopen_s(&result, target, mode, fp); #endif - /* !checksrc! disable BANNEDFUNC 1 */ - free(fixed); + CURLX_FREE(fixed); return result; } @@ -382,8 +367,7 @@ int curlx_win32_stat(const char *path, struct_stat *buffer) #endif #endif - /* !checksrc! disable BANNEDFUNC 1 */ - free(fixed); + CURLX_FREE(fixed); return result; } diff --git a/lib/curlx/multibyte.c b/lib/curlx/multibyte.c index 2583f30870..fb3b7be3e1 100644 --- a/lib/curlx/multibyte.c +++ b/lib/curlx/multibyte.c @@ -45,13 +45,11 @@ wchar_t *curlx_convert_UTF8_to_wchar(const char *str_utf8) int str_w_len = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str_utf8, -1, NULL, 0); if(str_w_len > 0) { - /* !checksrc! disable BANNEDFUNC 1 */ - str_w = malloc(str_w_len * sizeof(wchar_t)); + str_w = CURLX_MALLOC(str_w_len * sizeof(wchar_t)); if(str_w) { if(MultiByteToWideChar(CP_UTF8, 0, str_utf8, -1, str_w, str_w_len) == 0) { - /* !checksrc! disable BANNEDFUNC 1 */ - free(str_w); + CURLX_FREE(str_w); return NULL; } } @@ -69,13 +67,11 @@ char *curlx_convert_wchar_to_UTF8(const wchar_t *str_w) int bytes = WideCharToMultiByte(CP_UTF8, 0, str_w, -1, NULL, 0, NULL, NULL); if(bytes > 0) { - /* !checksrc! disable BANNEDFUNC 1 */ - str_utf8 = malloc(bytes); + str_utf8 = CURLX_MALLOC(bytes); if(str_utf8) { if(WideCharToMultiByte(CP_UTF8, 0, str_w, -1, str_utf8, bytes, NULL, NULL) == 0) { - /* !checksrc! disable BANNEDFUNC 1 */ - free(str_utf8); + CURLX_FREE(str_utf8); return NULL; } } diff --git a/lib/curlx/multibyte.h b/lib/curlx/multibyte.h index fac07c2eeb..3eae4e75bd 100644 --- a/lib/curlx/multibyte.h +++ b/lib/curlx/multibyte.h @@ -44,12 +44,20 @@ * memory tracker memdebug functions. */ +#ifdef CURLDEBUG +#define CURLX_MALLOC(x) malloc(x) +#define CURLX_FREE(x) free(x) +#else +#define CURLX_MALLOC(x) curlx_malloc(x) +#define CURLX_FREE(x) curlx_free(x) +#endif + /* MultiByte conversions using Windows kernel32 library. */ wchar_t *curlx_convert_UTF8_to_wchar(const char *str_utf8); char *curlx_convert_wchar_to_UTF8(const wchar_t *str_w); /* the purpose of this macro is to free() without being traced by memdebug */ -#define curlx_unicodefree(ptr) free(ptr) +#define curlx_unicodefree(ptr) CURLX_FREE(ptr) #ifdef UNICODE @@ -65,8 +73,13 @@ typedef union { #else /* !UNICODE */ +#ifdef CURLDEBUG #define curlx_convert_UTF8_to_tchar(ptr) _strdup(ptr) #define curlx_convert_tchar_to_UTF8(ptr) _strdup(ptr) +#else +#define curlx_convert_UTF8_to_tchar(ptr) curlx_strdup(ptr) +#define curlx_convert_tchar_to_UTF8(ptr) curlx_strdup(ptr) +#endif typedef union { char *tchar_ptr;