[2/2] kernel32: Add a workaround for broken apps that pass negative values to ReadConsole.
Dmitry Timoshkov
dmitry at baikal.ru
Mon Apr 14 21:20:44 CDT 2014
---
dlls/kernel32/console.c | 7 +++++++
dlls/kernel32/tests/console.c | 6 ------
2 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/dlls/kernel32/console.c b/dlls/kernel32/console.c
index 9d47bf4..0fbabd0 100644
--- a/dlls/kernel32/console.c
+++ b/dlls/kernel32/console.c
@@ -34,6 +34,7 @@
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
+#include <limits.h>
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
@@ -1637,6 +1638,12 @@ BOOL WINAPI ReadConsoleW(HANDLE hConsoleInput, LPVOID lpBuffer,
TRACE("(%p,%p,%d,%p,%p)\n",
hConsoleInput, lpBuffer, nNumberOfCharsToRead, lpNumberOfCharsRead, lpReserved);
+ if (nNumberOfCharsToRead > INT_MAX)
+ {
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ return FALSE;
+ }
+
if (!GetConsoleMode(hConsoleInput, &mode))
return FALSE;
if ((fd = get_console_bare_fd(hConsoleInput)) != -1)
diff --git a/dlls/kernel32/tests/console.c b/dlls/kernel32/tests/console.c
index 52dcaac..fab8e75 100644
--- a/dlls/kernel32/tests/console.c
+++ b/dlls/kernel32/tests/console.c
@@ -2566,8 +2566,6 @@ static void test_ReadConsole(void)
ok(ret == INVALID_FILE_SIZE, "expected INVALID_FILE_SIZE, got %#x\n", ret);
ok(GetLastError() == ERROR_INVALID_HANDLE, "expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
-if (0) /* FIXME: uncomment once Wine doesn't hang forever */
-{
bytes = 0xdeadbeef;
SetLastError(0xdeadbeef);
ret = ReadFile(std_input, buf, -128, &bytes, NULL);
@@ -2581,10 +2579,7 @@ if (0) /* FIXME: uncomment once Wine doesn't hang forever */
ok(!ret, "expected 0, got %u\n", ret);
ok(GetLastError() == ERROR_NOT_ENOUGH_MEMORY, "expected ERROR_NOT_ENOUGH_MEMORY, got %d\n", GetLastError());
ok(bytes == 0xdeadbeef, "expected 0xdeadbeef, %#x\n", bytes);
-}
-if (0) /* FIXME: uncomment once Wine doesn't hang forever */
-{
bytes = 0xdeadbeef;
SetLastError(0xdeadbeef);
ret = ReadConsoleW(std_input, buf, -128, &bytes, NULL);
@@ -2592,7 +2587,6 @@ if (0) /* FIXME: uncomment once Wine doesn't hang forever */
ok(GetLastError() == ERROR_NOT_ENOUGH_MEMORY, "expected ERROR_NOT_ENOUGH_MEMORY, got %d\n", GetLastError());
ok(bytes == 0xdeadbeef, "expected 0xdeadbeef, %#x\n", bytes);
}
-}
START_TEST(console)
{
--
1.9.2
More information about the wine-patches
mailing list