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?rev=67048&r1=67047&r2=67048&view=diff
==============================================================================
--- 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);


Reply via email to