Module: wine Branch: master Commit: ca96aed384709aca388c7a4f76a1d6422087d583 URL: http://source.winehq.org/git/wine.git/?a=commit;h=ca96aed384709aca388c7a4f76...
Author: Andrew Nguyen anguyen@codeweavers.com Date: Tue Aug 3 07:07:59 2010 -0500
gdi32: Improve AddFontMemResourceEx parameter validation.
---
dlls/gdi32/font.c | 6 +++ dlls/gdi32/tests/font.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 0 deletions(-)
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c index 9ebf7b3..133681c 100644 --- a/dlls/gdi32/font.c +++ b/dlls/gdi32/font.c @@ -3188,6 +3188,12 @@ HANDLE WINAPI AddFontMemResourceEx( PVOID pbFont, DWORD cbFont, PVOID pdv, DWORD HANDLE ret; DWORD num_fonts;
+ if (!pbFont || !cbFont || !pcFonts) + { + SetLastError(ERROR_INVALID_PARAMETER); + return NULL; + } + ret = WineEngAddFontMemResourceEx(pbFont, cbFont, pdv, &num_fonts); if (ret) { diff --git a/dlls/gdi32/tests/font.c b/dlls/gdi32/tests/font.c index bbb54cd..fa48360 100644 --- a/dlls/gdi32/tests/font.c +++ b/dlls/gdi32/tests/font.c @@ -3185,6 +3185,8 @@ static void test_AddFontMemResource(void) void *font; DWORD font_size, num_fonts; HANDLE ret; + DEVMODEA dmA; + BOOL is_winxp;
if (!pAddFontMemResourceEx || !pRemoveFontMemResourceEx) { @@ -3199,6 +3201,74 @@ static void test_AddFontMemResource(void) return; }
+ is_winxp = EnumDisplaySettingsA(NULL, ENUM_CURRENT_SETTINGS, &dmA) && + (dmA.dmFields & DM_DISPLAYORIENTATION); + + if (is_winxp) + { + SetLastError(0xdeadbeef); + ret = pAddFontMemResourceEx(NULL, 0, NULL, NULL); + ok(!ret, "AddFontMemResourceEx should fail\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, + "Expected GetLastError() to return ERROR_INVALID_PARAMETER, got %u\n", + GetLastError()); + + SetLastError(0xdeadbeef); + ret = pAddFontMemResourceEx(NULL, 10, NULL, NULL); + ok(!ret, "AddFontMemResourceEx should fail\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, + "Expected GetLastError() to return ERROR_INVALID_PARAMETER, got %u\n", + GetLastError()); + + SetLastError(0xdeadbeef); + ret = pAddFontMemResourceEx(NULL, 0, NULL, &num_fonts); + ok(!ret, "AddFontMemResourceEx should fail\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, + "Expected GetLastError() to return ERROR_INVALID_PARAMETER, got %u\n", + GetLastError()); + + SetLastError(0xdeadbeef); + ret = pAddFontMemResourceEx(NULL, 10, NULL, &num_fonts); + ok(!ret, "AddFontMemResourceEx should fail\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, + "Expected GetLastError() to return ERROR_INVALID_PARAMETER, got %u\n", + GetLastError()); + + SetLastError(0xdeadbeef); + ret = pAddFontMemResourceEx(font, 0, NULL, NULL); + ok(!ret, "AddFontMemResourceEx should fail\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, + "Expected GetLastError() to return ERROR_INVALID_PARAMETER, got %u\n", + GetLastError()); + + SetLastError(0xdeadbeef); + ret = pAddFontMemResourceEx(font, 10, NULL, NULL); + ok(!ret, "AddFontMemResourceEx should fail\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, + "Expected GetLastError() to return ERROR_INVALID_PARAMETER, got %u\n", + GetLastError()); + + num_fonts = 0xdeadbeef; + SetLastError(0xdeadbeef); + ret = pAddFontMemResourceEx(font, 0, NULL, &num_fonts); + ok(!ret, "AddFontMemResourceEx should fail\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, + "Expected GetLastError() to return ERROR_INVALID_PARAMETER, got %u\n", + GetLastError()); + ok(num_fonts == 0xdeadbeef, "number of loaded fonts should be 0xdeadbeef\n"); + + num_fonts = 0xdeadbeef; + SetLastError(0xdeadbeef); + ret = pAddFontMemResourceEx(font, 10, NULL, &num_fonts); + ok(!ret, "AddFontMemResourceEx should fail\n"); + ok(GetLastError() == 0xdeadbeef, + "Expected GetLastError() to return 0xdeadbeef, got %u\n", + GetLastError()); + ok(num_fonts == 0xdeadbeef, "number of loaded fonts should be 0xdeadbeef\n"); + } + else + win_skip("AddFontMemResourceEx invalid parameter tests are problematic on Win2k\n"); + num_fonts = 0xdeadbeef; SetLastError(0xdeadbeef); ret = pAddFontMemResourceEx(font, font_size, NULL, &num_fonts); @@ -3215,11 +3285,19 @@ static void test_AddFontMemResource(void) font = load_font("sserife.fon", &font_size); ok(font != NULL, "Unable to locate and load font sserife.fon\n");
+ SetLastError(0xdeadbeef); ret = pAddFontMemResourceEx(font, font_size, NULL, (void *)0xdeadbeef); ok(!ret, "AddFontMemResourceEx should fail\n"); + ok(GetLastError() == 0xdeadbeef, + "Expected GetLastError() to return 0xdeadbeef, got %u\n", + GetLastError());
+ SetLastError(0xdeadbeef); ret = pAddFontMemResourceEx(font, font_size, NULL, NULL); ok(!ret, "AddFontMemResourceEx should fail\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, + "Expected GetLastError() to return ERROR_INVALID_PARAMETER, got %u\n", + GetLastError());
free_font(font); }