1) Prevent out of bounds access to ws[-1] (passed buffer) which happens

when the first mb sequence is incomplete and there are not enougn chars in
the read buffer. ws[-1] may lead to memory faults or false results, in
case the memory here contains '\n'.

2) Fix EOF checking I mess in my previos r305406 commit.

MFC after:      3 days
This commit is contained in:
Andrey A. Chernov 2016-09-05 04:49:58 +00:00
parent 7a466137f0
commit 4a9921c601

View File

@ -93,7 +93,7 @@ fgetws_l(wchar_t * __restrict ws, int n, FILE * __restrict fp, locale_t locale)
fp->_p = (unsigned char *)src;
n -= nconv;
wsp += nconv;
} while (wsp[-1] != L'\n' && n > 1 && (fp->_r > 0 ||
} while ((wsp == ws || wsp[-1] != L'\n') && n > 1 && (fp->_r > 0 ||
(sret = __srefill(fp)) == 0));
if (sret && !__sfeof(fp))
/* ferror */
@ -104,7 +104,7 @@ fgetws_l(wchar_t * __restrict ws, int n, FILE * __restrict fp, locale_t locale)
errno = EILSEQ;
goto error;
}
if (sret)
if (wsp == ws)
/* EOF */
goto error;
*wsp = L'\0';