4
0
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:
Corinna Vinschen 2024-04-09 22:30:03 +02:00
parent e00cb12694
commit 14216d5442
2 changed files with 6 additions and 1 deletions

View File

@ -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

View File

@ -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