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:
parent
7a466137f0
commit
4a9921c601
@ -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';
|
||||
|
Loading…
x
Reference in New Issue
Block a user