[CMD]: Addendum to r67013: Check whether len > 0 before decrementing it in case we point to a newline. Fix some spurious crashes and should fix some other cmd_winetests.

svn path=/trunk/; revision=67048
This commit is contained in:
Hermès Bélusca-Maïto
2015-04-04 14:59:03 +00:00
parent 4eebb1e0c9
commit 9beab72eb8
+4 -4
View File
@@ -179,7 +179,7 @@ static VOID ConWrite(TCHAR *str, DWORD len, DWORD nStdHandle)
/* Loop until we find a \r or \n character */
// FIXME: What about the pair \r\n ?
p = str;
while (*(PWCHAR)p != L'\r' && *(PWCHAR)p != L'\n' && len > 0)
while (len > 0 && *(PWCHAR)p != L'\r' && *(PWCHAR)p != L'\n')
{
/* Advance one character */
p = (PVOID)((PWCHAR)p + 1);
@@ -191,7 +191,7 @@ static VOID ConWrite(TCHAR *str, DWORD len, DWORD nStdHandle)
WriteFile(hOutput, str, dwNumBytes, &dwNumBytes, NULL);
/* If we hit \r or \n ... */
if (*(PWCHAR)p == L'\r' || *(PWCHAR)p == L'\n')
if (len > 0 && (*(PWCHAR)p == L'\r' || *(PWCHAR)p == L'\n'))
{
/* ... send a carriage-return + newline sequence and skip \r or \n */
WriteFile(hOutput, L"\r\n", 2 * sizeof(WCHAR), &dwNumBytes, NULL);
@@ -229,7 +229,7 @@ static VOID ConWrite(TCHAR *str, DWORD len, DWORD nStdHandle)
/* Loop until we find a \r or \n character */
// FIXME: What about the pair \r\n ?
p = str;
while (*(PCHAR)p != '\r' && *(PCHAR)p != '\n' && len > 0)
while (len > 0 && *(PCHAR)p != '\r' && *(PCHAR)p != '\n')
{
/* Advance one character */
p = (PVOID)((PCHAR)p + 1);
@@ -241,7 +241,7 @@ static VOID ConWrite(TCHAR *str, DWORD len, DWORD nStdHandle)
WriteFile(hOutput, str, dwNumBytes, &dwNumBytes, NULL);
/* If we hit \r or \n ... */
if (*(PCHAR)p == '\r' || *(PCHAR)p == '\n')
if (len > 0 && (*(PCHAR)p == '\r' || *(PCHAR)p == '\n'))
{
/* ... send a carriage-return + newline sequence and skip \r or \n */
WriteFile(hOutput, "\r\n", 2, &dwNumBytes, NULL);