From 485fb14ab414ef7fde4469a51b116281758a4aa0 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Wed, 2 May 2012 13:59:48 -0400 Subject: fix longstanding exit logic bugs in mbsnrtowcs and wcsnrtombs these are POSIX 2008 (previously GNU extension) functions that are rarely used. apparently they had never been tested before, since the end-of-string logic was completely missing. mbsnrtowcs is used by modern versions of bash for its glob implementation, and and this bug was causing tab completion to hang in an infinite loop. --- src/multibyte/mbsnrtowcs.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/multibyte/mbsnrtowcs.c') diff --git a/src/multibyte/mbsnrtowcs.c b/src/multibyte/mbsnrtowcs.c index c6f0207f..f42e30d9 100644 --- a/src/multibyte/mbsnrtowcs.c +++ b/src/multibyte/mbsnrtowcs.c @@ -47,6 +47,10 @@ size_t mbsnrtowcs(wchar_t *wcs, const char **src, size_t n, size_t wn, mbstate_t cnt = l; break; } + if (!l) { + s = 0; + break; + } /* have to roll back partial character */ *(unsigned *)st = 0; break; -- cgit v1.2.1