-
-
Notifications
You must be signed in to change notification settings - Fork 7k
idn: clarify null-termination on Windows #19980
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
https://learn.microsoft.com/windows/win32/api/stringapiset/nf-stringapiset-multibytetowidechar https://learn.microsoft.com/windows/win32/api/stringapiset/nf-stringapiset-widechartomultibyte https://learn.microsoft.com/windows/win32/api/winnls/nf-winnls-idntoascii https://learn.microsoft.com/windows/win32/api/winnls/nf-winnls-idntounicode WINE source code: https://gitlab.winehq.org/wine/wine/-/blob/wine-10.20/dlls/kernelbase/locale.c https://gitlab.winehq.org/wine/wine/-/blob/wine-10.20/dlls/ntdll/locale.c https://gitlab.winehq.org/wine/wine/-/blob/wine-10.20/dlls/ntdll/locale_private.h Ref: curl#19976 (comment) Follow-up to 6694a42 curl#19798
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.
Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.
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.
Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.
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.
Pull request overview
Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
Thanks for reviewing! |
Add comments to clarify that a terminating null is always present in
the buffers returned to the caller.
The curl APIs
win32_idn_to_ascii()orwin32_ascii_to_idn()receivea null-terminated UTF-8 string as input. They first convert it to wide
chars by first asking
MultiByteToWideChar()to calculate the length,by passing -1. This API returns the length with the null char included
(=
strlen() + 1), does the conversion, with the output alsonull-terminated.
IdnTo*()preserve this null character as documented.Then we pass this null-terminated, fixed-length buffer ito
WideCharToMultiByte(), which keeps preserving the null, ending up inthe buffer returned to the caller.
Refs:
https://learn.microsoft.com/windows/win32/api/stringapiset/nf-stringapiset-multibytetowidechar
https://learn.microsoft.com/windows/win32/api/stringapiset/nf-stringapiset-widechartomultibyte
https://learn.microsoft.com/windows/win32/api/winnls/nf-winnls-idntoascii
https://learn.microsoft.com/windows/win32/api/winnls/nf-winnls-idntounicode
WINE source code:
https://gitlab.winehq.org/wine/wine/-/blob/wine-10.20/dlls/kernelbase/locale.c
https://gitlab.winehq.org/wine/wine/-/blob/wine-10.20/dlls/ntdll/locale.c
https://gitlab.winehq.org/wine/wine/-/blob/wine-10.20/dlls/ntdll/locale_private.h
Ref: #19976 (comment)
Follow-up to 6694a42 #19798