| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
… Windows It happened when there were at least 16 characters after dot in the locale name.
There was a problem hiding this comment.
This fix should probably be limited to just a few Windows releases, unless Win11 also shows the same behavior.
Sorry, something went wrong.
| size_t len = end ? (size_t)(end - locale) : strlen(locale); | ||
| const char *dot = memchr(locale, '.', len); | ||
| if (dot && locale + len - dot > 16) { | ||
| return -1; |
There was a problem hiding this comment.
Where did you get the "16" from ?
Please include some comments to explain where you got it from and why this check is necessary. Thanks.
Sorry, something went wrong.
There was a problem hiding this comment.
BTW: It's better to make this limit configurable via a constant.
Sorry, something went wrong.
There was a problem hiding this comment.
Comes from https://github.com/huangqinjin/ucrt/blob/d6e817a4cc90f6f1fe54f8a0aa4af4fff0bb647d/inc/corecrt_internal.h#L401, though I don't think that constant is available for us at compile time (the internal headers for the CRT are, well, internal).
A constant at least gives it a name though, and using MAX_CP_LEN may help someone find an updated definition in the future.
Sorry, something went wrong.
There was a problem hiding this comment.
Looks good now.
Sorry, something went wrong.
|
When you're done making the requested changes, leave the comment: I have made the requested changes; please review again. |
Sorry, something went wrong.
|
How to check the Windows version? I do not have Windows 11, can you please test this PR on Windows 11? |
Sorry, something went wrong.
I wouldn't bother, this limit has been around forever. The bigger challenge would be how to handle @<extras> if/when support is added, because right now there's no support for them in UCRT at all. |
Sorry, something went wrong.
Sorry, but I don't have a Windows 11 build system available at the moment (not even a working Win10 system, after the VM crashed some time ago). Let's not worry about this now. We can disable things again selectively, once the Windows SDK provides better support for handling locale names (perhaps in a few years). |
Sorry, something went wrong.
I am planning to handle this in Python code. Translate "zh_HK.UTF-8@hans" to "zh-Hans-HK.utf-8", etc. |
Sorry, something went wrong.
Is that how Windows handles modifiers ? |
Sorry, something went wrong.
|
I have made the requested changes; please review again. |
Sorry, something went wrong.
|
Thanks for making the requested changes! @malemburg: please review the changes made to this pull request. |
Sorry, something went wrong.
| size_t len = end ? (size_t)(end - locale) : strlen(locale); | ||
| const char *dot = memchr(locale, '.', len); | ||
| if (dot && locale + len - dot > 16) { | ||
| return -1; |
There was a problem hiding this comment.
Looks good now.
Sorry, something went wrong.
No - Windows UCRT treats them as part of the code page name and overruns its own buffers, leading to a crash 😉 I don't think there's any support for modifiers in locales at all. The OS itself has always used a different system for those AFAICT, it's just the POSIX emulation in the CRT that's trying to fudge over it. |
Sorry, something went wrong.
In that case, it's probably best to simply strip from them locale strings passed to setlocale() on Windows. Esp. since the meaning of those modifiers is not standardized anywhere, AFAIK. |
Sorry, something went wrong.
Yes. It supports format language[-script][-region][.codepage] for BCP-47 locale names. I seen also sr_Latn_RS instead of sr_RS@latin on some of Posix platforms, so we should support this format not only on Windows. setlocale() should try several variants. |
Sorry, something went wrong.
|
Thanks @serhiy-storchaka for the PR 🌮🎉.. I'm working now to backport this PR to: 3.13, 3.14. |
Sorry, something went wrong.
… Windows (pythonGH-137300) It happened when there were at least 16 characters after dot in the locale name. (cherry picked from commit 718e0c8) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
… Windows (pythonGH-137300) It happened when there were at least 16 characters after dot in the locale name. (cherry picked from commit 718e0c8) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
|
GH-137305 is a backport of this pull request to the 3.14 branch. |
Sorry, something went wrong.
|
GH-137306 is a backport of this pull request to the 3.13 branch. |
Sorry, something went wrong.
|
Thank you for your review, @malemburg and @zooba. |
Sorry, something went wrong.
… Windows (pythonGH-137300) It happened when there were at least 16 characters after dot in the locale name.
| Back | FazBrowse Home | New Git URL |
It happened when there were at least 16 characters after dot in the locale name.