-
-
Notifications
You must be signed in to change notification settings - Fork 6.8k
Use a custom implementation of wcsdup on Windows, so that malloc/free… #7540
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.