Daniel Lehman : gdi32: Initialize rgbReserved to zero in SetDIBColorTable.

Alexandre Julliard julliard at winehq.org
Wed Nov 23 16:08:38 CST 2016


Module: wine
Branch: master
Commit: 5244bd0748cbde3d238f1c125fad76663eb59558
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5244bd0748cbde3d238f1c125fad76663eb59558

Author: Daniel Lehman <dlehman25 at gmail.com>
Date:   Tue Nov 22 23:28:00 2016 -0800

gdi32: Initialize rgbReserved to zero in SetDIBColorTable.

Signed-off-by: Daniel Lehman <dlehman25 at gmail.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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);




More information about the wine-cvs mailing list