Module: wine Branch: master Commit: 5244bd0748cbde3d238f1c125fad76663eb59558 URL: http://source.winehq.org/git/wine.git/?a=commit;h=5244bd0748cbde3d238f1c125f...
Author: Daniel Lehman dlehman25@gmail.com Date: Tue Nov 22 23:28:00 2016 -0800
gdi32: Initialize rgbReserved to zero in SetDIBColorTable.
Signed-off-by: Daniel Lehman dlehman25@gmail.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ddraw/tests/ddraw1.c | 2 +- dlls/ddraw/tests/ddraw2.c | 2 +- dlls/ddraw/tests/ddraw4.c | 2 +- dlls/ddraw/tests/ddraw7.c | 2 +- dlls/gdi32/dib.c | 10 ++++++++-- dlls/gdi32/tests/bitmap.c | 3 ++- 6 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c index 7824a92..4a9ed7e 100644 --- a/dlls/ddraw/tests/ddraw1.c +++ b/dlls/ddraw/tests/ddraw1.c @@ -6412,7 +6412,7 @@ static void test_palette_alpha(void) rgbquad.rgbGreen, test_data[i].name); ok(rgbquad.rgbBlue == 0, "Expected rgbBlue = 0, got %#x, %s surface.\n", rgbquad.rgbBlue, test_data[i].name); - todo_wine ok(rgbquad.rgbReserved == 0, "Expected rgbReserved = 0, got %u, %s surface.\n", + ok(rgbquad.rgbReserved == 0, "Expected rgbReserved = 0, got %u, %s surface.\n", rgbquad.rgbReserved, test_data[i].name); hr = IDirectDrawSurface_ReleaseDC(surface, dc); ok(SUCCEEDED(hr), "Failed to release DC, hr %#x.\n", hr); diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c index 9899566..611ccac 100644 --- a/dlls/ddraw/tests/ddraw2.c +++ b/dlls/ddraw/tests/ddraw2.c @@ -7659,7 +7659,7 @@ static void test_palette_alpha(void) rgbquad.rgbGreen, test_data[i].name); ok(rgbquad.rgbBlue == 0, "Expected rgbBlue = 0, got %#x, %s surface.\n", rgbquad.rgbBlue, test_data[i].name); - todo_wine ok(rgbquad.rgbReserved == 0, "Expected rgbReserved = 0, got %u, %s surface.\n", + ok(rgbquad.rgbReserved == 0, "Expected rgbReserved = 0, got %u, %s surface.\n", rgbquad.rgbReserved, test_data[i].name); hr = IDirectDrawSurface2_ReleaseDC(surface, dc); ok(SUCCEEDED(hr), "Failed to release DC, hr %#x.\n", hr); diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index 44ef46c..b74b754 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -8623,7 +8623,7 @@ static void test_palette_alpha(void) rgbquad.rgbGreen, test_data[i].name); ok(rgbquad.rgbBlue == 0, "Expected rgbBlue = 0, got %#x, %s surface.\n", rgbquad.rgbBlue, test_data[i].name); - todo_wine ok(rgbquad.rgbReserved == 0, "Expected rgbReserved = 0, got %u, %s surface.\n", + ok(rgbquad.rgbReserved == 0, "Expected rgbReserved = 0, got %u, %s surface.\n", rgbquad.rgbReserved, test_data[i].name); hr = IDirectDrawSurface4_ReleaseDC(surface, dc); ok(SUCCEEDED(hr), "Failed to release DC, hr %#x.\n", hr); diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index a193e38..e00bbcd 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -8423,7 +8423,7 @@ static void test_palette_alpha(void) rgbquad.rgbGreen, test_data[i].name); ok(rgbquad.rgbBlue == 0, "Expected rgbBlue = 0, got %#x, %s surface.\n", rgbquad.rgbBlue, test_data[i].name); - todo_wine ok(rgbquad.rgbReserved == 0, "Expected rgbReserved = 0, got %u, %s surface.\n", + ok(rgbquad.rgbReserved == 0, "Expected rgbReserved = 0, got %u, %s surface.\n", rgbquad.rgbReserved, test_data[i].name); hr = IDirectDrawSurface7_ReleaseDC(surface, dc); ok(SUCCEEDED(hr), "Failed to release DC, hr %#x.\n", hr); diff --git a/dlls/gdi32/dib.c b/dlls/gdi32/dib.c index 36a7b0f..96280f9 100644 --- a/dlls/gdi32/dib.c +++ b/dlls/gdi32/dib.c @@ -922,7 +922,7 @@ INT WINAPI SetDIBitsToDevice(HDC hdc, INT xDest, INT yDest, DWORD cx, UINT WINAPI SetDIBColorTable( HDC hdc, UINT startpos, UINT entries, const RGBQUAD *colors ) { DC * dc; - UINT result = 0; + UINT i, result = 0; BITMAPOBJ * bitmap;
if (!(dc = get_dc_ptr( hdc ))) return 0; @@ -932,7 +932,13 @@ UINT WINAPI SetDIBColorTable( HDC hdc, UINT startpos, UINT entries, const RGBQUA if (startpos < bitmap->dib.dsBmih.biClrUsed) { result = min( entries, bitmap->dib.dsBmih.biClrUsed - startpos ); - memcpy(bitmap->color_table + startpos, colors, result * sizeof(RGBQUAD)); + for (i = 0; i < result; i++) + { + bitmap->color_table[startpos + i].rgbBlue = colors[i].rgbBlue; + bitmap->color_table[startpos + i].rgbGreen = colors[i].rgbGreen; + bitmap->color_table[startpos + i].rgbRed = colors[i].rgbRed; + bitmap->color_table[startpos + i].rgbReserved = 0; + } } GDI_ReleaseObj( dc->hBitmap );
diff --git a/dlls/gdi32/tests/bitmap.c b/dlls/gdi32/tests/bitmap.c index 5539283..88250ca 100644 --- a/dlls/gdi32/tests/bitmap.c +++ b/dlls/gdi32/tests/bitmap.c @@ -880,12 +880,13 @@ static void test_dibsections(void) ok( ret == 1, "SetDIBColorTable returned unexpected result %u\n", ret ); ok( rgb[0].rgbReserved == 123, "Expected rgbReserved = 123, got %u\n", rgb[0].rgbReserved );
+ rgb[0].rgbRed = rgb[0].rgbGreen = rgb[0].rgbBlue = rgb[0].rgbReserved = -1; ret = GetDIBColorTable( hdcmem, 0, 1, rgb ); ok( ret == 1, "GetDIBColorTable returned unexpected result %u\n", ret ); ok( rgb[0].rgbRed == 1, "Expected rgbRed = 1, got %u\n", rgb[0].rgbRed ); ok( rgb[0].rgbGreen == 2, "Expected rgbGreen = 2, got %u\n", rgb[0].rgbGreen ); ok( rgb[0].rgbBlue == 3, "Expected rgbBlue = 3, got %u\n", rgb[0].rgbBlue ); - todo_wine ok( rgb[0].rgbReserved == 0, "Expected rgbReserved = 0, got %u\n", rgb[0].rgbReserved ); + ok( rgb[0].rgbReserved == 0, "Expected rgbReserved = 0, got %u\n", rgb[0].rgbReserved );
SelectObject(hdcmem, oldbm); DeleteObject(hdib);