Use a custom implementation of wcsdup on Windows, so that malloc/free…#7540
Use a custom implementation of wcsdup on Windows, so that malloc/free…#7540Myriachan wants to merge 3 commits intocurl:masterfrom
Conversation
… overrides from curl_global_init are used for wcsdup correctly.
lib/strdup.c
Outdated
| size_t lengthnul; | ||
| size_t lengthbytes; | ||
|
|
||
| if (SIZE_MAX - length < 1) |
There was a problem hiding this comment.
These overflow checks are probably unnecessary, because presumably the wchar string has a size fitting in size_t. I don't know what your standards are for checks like these.
There was a problem hiding this comment.
stdint may not be available and shouldn't be necessary. curl_setup defines SIZE_T_MAX, you can use that instead. Also Curl_wcsdup doesn't need so many lines, you can do a single check like
if(length > (SIZE_T_MAX / sizeof(wchar_t)) - 1)
return NULL;
return (wchar_t *)Curl_memdup(src, (length + 1) * sizeof(wchar_t))
Thanks! Didn't know about libcurl having a |
|
Thanks! |
|
// sets 'Curl_cwcsdup' to '_wcsdup'
curl_global_init(CURL_GLOBAL_DEFAULT);
curl_global_cleanup();
// doesn't reset 'Curl_cwcsdup' to 'Curl_wcsdup', it's still '_wcsdup'
curl_global_init_mem(CURL_GLOBAL_DEFAULT, m, f, r, s, c); |
|
If you have found a bug in curl related to this PR then please open a new issue and explain how to reproduce |
Also: - add two related casts to match rest of code. - replace deprecated `wcsdup` with `_wcsdup` in libtests. Ref: https://learn.microsoft.com/cpp/c-runtime-library/reference/strdup-wcsdup Follow-up to 76e047f curl#7540 Bug: curl#17840 (comment) Bug: curl#7540 (comment) Closes curl#17840
Also: - add two related casts to match rest of code. - replace deprecated `wcsdup` with `_wcsdup` in libtests. Ref: https://learn.microsoft.com/cpp/c-runtime-library/reference/strdup-wcsdup Follow-up to 76e047f curl#7540 Bug: curl#17840 (comment) Bug: curl#7540 (comment) Closes curl#17840
This callback was permanently mapped to libcurl's internal `Curl_wcsdup()`, which always uses the customizable malloc for allocation, thus making a custom mapping redundant anyway. To simplify, drop the callback and map `_tcsdup()` in Unicode mode directly to `Curl_wcsdup()`. Also fixes: - `curl_global_init()` which, before this patch, (re)initialized its mapping to `_wcsdup()`, returning buffers potentially incompatible with a custom allocator. Bug: #17840 (comment) Bug: #7540 (comment) Co-reported-by: Luca Kellermann Follow-up to 76e047f #7540 Assisted-by: Jay Satiro Closes #17843
… overrides from curl_global_init are used for wcsdup correctly.