Branch: master

1afc62ef 2014-05-19 12:06:45 Slávek Banko
Fix overwriting memory for an application icon
This resolves Bug 2033
M src/kernel/qimage.cpp
M src/kernel/qpixmap_x11.cpp
M src/kernel/qwidget_x11.cpp
diff --git a/src/kernel/qimage.cpp b/src/kernel/qimage.cpp
index 214fc85..4c489d2 100644
--- a/src/kernel/qimage.cpp
+++ b/src/kernel/qimage.cpp
@@ -1531,12 +1531,12 @@
 	int* line2[3];
 	int* pv[3];
 	if ( ( conversion_flags & Qt::Dither_Mask ) == Qt::DiffuseDither ) {
-	    line1[0] = new int[src->width()];
-	    line2[0] = new int[src->width()];
-	    line1[1] = new int[src->width()];
-	    line2[1] = new int[src->width()];
-	    line1[2] = new int[src->width()];
-	    line2[2] = new int[src->width()];
+	    line1[0] = new int[sw];
+	    line2[0] = new int[sw];
+	    line1[1] = new int[sw];
+	    line2[1] = new int[sw];
+	    line1[2] = new int[sw];
+	    line2[2] = new int[sw];
 	    pv[0] = new int[sw];
 	    pv[1] = new int[sw];
 	    pv[2] = new int[sw];
diff --git a/src/kernel/qpixmap_x11.cpp b/src/kernel/qpixmap_x11.cpp
index d0a16c5..28d2926 100644
--- a/src/kernel/qpixmap_x11.cpp
+++ b/src/kernel/qpixmap_x11.cpp
@@ -764,6 +764,7 @@
         else
 #endif
         qSafeXDestroyImage( xi );
+	((QPixmap*)this)->data->ximage = 0;
 	return image;
     }
 
@@ -947,7 +948,8 @@
             qt_XShmDestroyImage( xi, &shminfo );
         else
 #endif
-            qSafeXDestroyImage( xi );
+	qSafeXDestroyImage( xi );
+	((QPixmap*)this)->data->ximage = 0;
 	return image;
     }
 
diff --git a/src/kernel/qwidget_x11.cpp b/src/kernel/qwidget_x11.cpp
index f98a5cb..ddad9cd 100644
--- a/src/kernel/qwidget_x11.cpp
+++ b/src/kernel/qwidget_x11.cpp
@@ -1336,7 +1336,6 @@
 		    int r = int( qRed( l ) );
 		    int g = int( qGreen( l ) );
 		    int b = int( qBlue( l ) );
-		    ls[x] = qRgb( r, g, b );
 		    XSetForeground(x11Display(), gc, (r << 16) | (g << 8) | b );
 		    XDrawPoint(x11Display(), pmHandle, gc, x, y);
 		}