Dmitry Timoshkov : gdi32: Add a test for minimal acceptable DEVMODEA size, make it pass under Wine.
Alexandre Julliard
julliard at winehq.org
Thu Dec 20 06:21:45 CST 2007
Module: wine
Branch: master
Commit: c3fe9ec2f74ed135df1fb08faf13730050734b95
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c3fe9ec2f74ed135df1fb08faf13730050734b95
Author: Dmitry Timoshkov <dmitry at codeweavers.com>
Date: Thu Dec 20 14:49:59 2007 +0800
gdi32: Add a test for minimal acceptable DEVMODEA size, make it pass under Wine.
---
dlls/gdi32/driver.c | 5 +++++
dlls/gdi32/tests/dc.c | 13 +++++++++++++
2 files changed, 18 insertions(+), 0 deletions(-)
diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c
index a2aa033..31810b0 100644
--- a/dlls/gdi32/driver.c
+++ b/dlls/gdi32/driver.c
@@ -414,6 +414,11 @@ DEVMODEW * WINAPI GdiConvertToDevmodeW(const DEVMODEA *dmA)
WORD dmW_size, dmA_size;
dmA_size = dmA->dmSize;
+
+ /* this is the minimal dmSize that XP accepts */
+ if (dmA_size < FIELD_OFFSET(DEVMODEA, dmFields))
+ return NULL;
+
if (dmA_size > sizeof(DEVMODEA))
dmA_size = sizeof(DEVMODEA);
diff --git a/dlls/gdi32/tests/dc.c b/dlls/gdi32/tests/dc.c
index 60b6ad7..01cb064 100644
--- a/dlls/gdi32/tests/dc.c
+++ b/dlls/gdi32/tests/dc.c
@@ -222,6 +222,19 @@ static void test_GdiConvertToDevmodeW(void)
"expected %04x, got %04x\n",
FIELD_OFFSET(DEVMODEW, dmPanningHeight) + sizeof(dmW->dmPanningHeight), dmW->dmSize);
HeapFree(GetProcessHeap(), 0, dmW);
+
+ SetLastError(0xdeadbeef);
+ dmA.dmSize = 0;
+ dmW = pGdiConvertToDevmodeW(&dmA);
+ ok(!dmW, "GdiConvertToDevmodeW should fail\n");
+ ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %u\n", GetLastError());
+
+ /* this is the minimal dmSize that XP accepts */
+ dmA.dmSize = FIELD_OFFSET(DEVMODEA, dmFields);
+ dmW = pGdiConvertToDevmodeW(&dmA);
+ ok(dmW->dmSize == FIELD_OFFSET(DEVMODEW, dmFields),
+ "expected %04x, got %04x\n", FIELD_OFFSET(DEVMODEW, dmFields), dmW->dmSize);
+ HeapFree(GetProcessHeap(), 0, dmW);
}
START_TEST(dc)
More information about the wine-cvs
mailing list