Author: hbelusca Date: Sat Apr 4 14:59:03 2015 New Revision: 67048
URL: http://svn.reactos.org/svn/reactos?rev=67048&view=rev Log: [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.
Modified: trunk/reactos/base/shell/cmd/console.c
Modified: trunk/reactos/base/shell/cmd/console.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/console.c?re... ============================================================================== --- trunk/reactos/base/shell/cmd/console.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/console.c [iso-8859-1] Sat Apr 4 14:59:03 2015 @@ -179,7 +179,7 @@ /* 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 @@ 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 @@ /* 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 @@ 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);