mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-02-08 18:19:08 +08:00
Cygwin: globify: read full 32 bit character
While commit 0321fb573654 ("Cygwin: glob: convert wchar_t to wint_t") switched the entire glob mechanism from wchar_t to wint_t, the globify function calling glob on a DOS command line did not catch up and only checked for the next character constituting a 16 bit wchar_t. This broke reading surrogate pairs from incoming DOS command lines if the string had to go through glob(3). Check for an entire 32 bit unicode char instead. Fixes: 0321fb573654 ("Cygwin: glob: convert wchar_t to wint_t") Reported-by: David Allsopp <david@tarides.com> Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
e00cb12694
commit
14216d5442
@ -236,12 +236,13 @@ globify (char *word, char **&argv, int &argc, int &argvlen)
|
||||
char quote = *s;
|
||||
while (*++s && *s != quote)
|
||||
{
|
||||
mbstate_t mbs = { 0 };
|
||||
if (dos_spec || *s != '\\')
|
||||
/* nothing */;
|
||||
else if (s[1] == quote || s[1] == '\\')
|
||||
s++;
|
||||
*p++ = '\\';
|
||||
size_t cnt = isascii (*s) ? 1 : mbtowc (NULL, s, MB_CUR_MAX);
|
||||
size_t cnt = isascii (*s) ? 1 : mbrtowi (NULL, s, MB_CUR_MAX, &mbs);
|
||||
if (cnt <= 1 || cnt == (size_t)-1)
|
||||
*p++ = *s;
|
||||
else
|
||||
|
@ -4,3 +4,7 @@ Fixes:
|
||||
- Fix regression in 3.5.3 which fails to open files for stat(2) if the
|
||||
file is opened exclusively by another process.
|
||||
Addresses: https://cygwin.com/pipermail/cygwin/2024-April/255811.html
|
||||
|
||||
- Fix regression introduced in 3.5.0 when reading surrogate pairs (i.e.,
|
||||
unicode chars >= 0x10000) from the DOS command line. Addresses:
|
||||
https://cygwin.com/pipermail/cygwin/2024-April/255807.html
|
||||
|
Loading…
x
Reference in New Issue
Block a user