[PATCH v3 03/25] winansi: avoid buffer overrun
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- May 2, 2017, 16:01 UTC
- Message-ID
- <8b3b6c1071503df2d3e04162ef7fb5f5ff56b177.1493740497.git.johannes.schindelin@gmx.de>
- In-Reply-To
- <cover.1493740497.git.johannes.schindelin@gmx.de>
When we could not convert the UTF-8 sequence into Unicode for writing to the Console, we should not try to write an insanely-long sequence of invalid wide characters (mistaking the negative return value for an unsigned length).
Reported by Coverity.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> --- compat/winansi.c | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/compat/winansi.c b/compat/winansi.c index fd6910746c8..861b79d8c31 100644 --- a/compat/winansi.c +++ b/compat/winansi.c @@ -135,6 +135,11 @@ static void write_console(unsigned char *str, size_t len) /* convert utf-8 to utf-16 */ int wlen = xutftowcsn(wbuf, (char*) str, ARRAY_SIZE(wbuf), len); + if (wlen < 0) { + wchar_t *err = L"[invalid]"; + WriteConsoleW(console, err, wcslen(err), &dummy, NULL); + return; + } /* write directly to console */ WriteConsoleW(console, wbuf, wlen, &dummy, NULL);
-- 2.12.2.windows.2.800.gede8f145e06