diff --git a/objects/dib.c b/objects/dib.c
index 1d480d4bc0d9c324af72c8c6b97b67110bbd1074..438cabe6afdd638d11f5bf51374f20a16fd70bde 100644
--- a/objects/dib.c
+++ b/objects/dib.c
@@ -297,15 +297,18 @@ UINT WINAPI SetDIBColorTable( HDC hdc, UINT startpos, UINT entries,
     
     if (dc->w.bitsPerPixel <= 8) {
 	palEntry = palette->logpalette.palPalEntry + startpos;
-	if (startpos + entries > (1 << dc->w.bitsPerPixel)) {
+	if (startpos + entries > (1 << dc->w.bitsPerPixel))
 	    entries = (1 << dc->w.bitsPerPixel) - startpos;
-	}
-	for (end = colors + entries; colors < end; palEntry++, colors++)
-	{
-	    palEntry->peRed   = colors->rgbRed;
-	    palEntry->peGreen = colors->rgbGreen;
-	    palEntry->peBlue  = colors->rgbBlue;
-	}
+
+        if (startpos + entries > palette->logpalette.palNumEntries)
+            entries = palette->logpalette.palNumEntries - startpos;
+
+        for (end = colors + entries; colors < end; palEntry++, colors++)
+        {
+            palEntry->peRed   = colors->rgbRed;
+            palEntry->peGreen = colors->rgbGreen;
+            palEntry->peBlue  = colors->rgbBlue;
+        }
     } else {
 	entries = 0;
     }