[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
printf %ls conversion
From: |
Grisha Levit |
Subject: |
printf %ls conversion |
Date: |
Mon, 17 Jul 2023 03:19:51 -0400 |
The mbsrtowcs call here doesn't convert the final \0 of mbs, leaving the
final byte of ws as whatever was just malloc-ed.
Noticed in an ASAN build which makes sure that this is never L'\0'. Oddly,
this didn't actually trigger an ASAN report, just saw that nothing was
getting printed by printf.
---
diff --git a/builtins/printf.def b/builtins/printf.def
index ad4f4d12..62820514 100644
--- a/builtins/printf.def
+++ b/builtins/printf.def
@@ -1493,7 +1493,7 @@ getwidestr (size_t *lenp)
mbs = garglist->word->word;
slen = strlen (mbs);
ws = (wchar_t *)xmalloc ((slen + 1) * sizeof (wchar_t));
- mblength = mbsrtowcs (ws, &mbs, slen, &state);
+ mblength = mbsrtowcs (ws, &mbs, slen + 1, &state);
if (lenp)
*lenp = mblength;
- printf %ls conversion,
Grisha Levit <=