[ros-diffs] [gadamopoulos] 55081: [kernel32] - Fix IntReadConsoleOutputCharacter to copy the correct count of characters. Its 3rd parameter is a character count and not buffer size. - Should fix infinite loop ...

gadamopoulos at svn.reactos.org gadamopoulos at svn.reactos.org
Sun Jan 22 22:27:08 UTC 2012


Author: gadamopoulos
Date: Sun Jan 22 22:27:08 2012
New Revision: 55081

URL: http://svn.reactos.org/svn/reactos?rev=55081&view=rev
Log:
[kernel32]
- Fix IntReadConsoleOutputCharacter to copy the correct count of characters. Its 3rd parameter is a character count and not buffer size. 
- Should fix infinite loop when kernel32:console test runs

Modified:
    trunk/reactos/dll/win32/kernel32/client/file/console.c

Modified: trunk/reactos/dll/win32/kernel32/client/file/console.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/file/console.c?rev=55081&r1=55080&r2=55081&view=diff
==============================================================================
--- trunk/reactos/dll/win32/kernel32/client/file/console.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/client/file/console.c [iso-8859-1] Sun Jan 22 22:27:08 2012
@@ -2634,18 +2634,17 @@
     PCSR_API_MESSAGE Request;
     ULONG CsrRequest;
     NTSTATUS Status;
-    ULONG nChars, SizeBytes, CharSize;
+    ULONG SizeBytes, CharSize;
     DWORD CharsRead = 0;
 
     CharSize = (bUnicode ? sizeof(WCHAR) : sizeof(CHAR));
 
-    nChars = min(nLength, CSRSS_MAX_READ_CONSOLE_OUTPUT_CHAR) / CharSize;
-    SizeBytes = nChars * CharSize;
+    nLength = min(nLength, CSRSS_MAX_READ_CONSOLE_OUTPUT_CHAR / CharSize);
+    SizeBytes = nLength * CharSize;
 
     Request = RtlAllocateHeap(RtlGetProcessHeap(), 0,
                               max(sizeof(CSR_API_MESSAGE),
-                              CSR_API_MESSAGE_HEADER_SIZE(CSRSS_READ_CONSOLE_OUTPUT_CHAR)
-                                  + min (nChars, CSRSS_MAX_READ_CONSOLE_OUTPUT_CHAR / CharSize) * CharSize));
+                              CSR_API_MESSAGE_HEADER_SIZE(CSRSS_READ_CONSOLE_OUTPUT_CHAR) + SizeBytes));
     if (Request == NULL)
     {
         SetLastError(ERROR_NOT_ENOUGH_MEMORY);
@@ -2661,7 +2660,7 @@
 
         Request->Data.ReadConsoleOutputCharRequest.ConsoleHandle = hConsoleOutput;
         Request->Data.ReadConsoleOutputCharRequest.Unicode = bUnicode;
-        Request->Data.ReadConsoleOutputCharRequest.NumCharsToRead = min(nLength, nChars);
+        Request->Data.ReadConsoleOutputCharRequest.NumCharsToRead = nLength;
         SizeBytes = Request->Data.ReadConsoleOutputCharRequest.NumCharsToRead * CharSize;
 
         Status = CsrClientCallServer(Request,




More information about the Ros-diffs mailing list