Listview K1

Dimitrie O. Paun dpaun at rogers.com
Thu Oct 3 22:55:33 CDT 2002


As I was saying a few days ago, we have to be conservative
when we send data to applications, some of them don't deal
with uninitialized data, as they should...

ChangeLog
  Do not send uninitialized data in notification to application
  (based on a patch by Alexandre Julliard <julliard at winehq.com>)

--- dlls/comctl32/listview.c.K0	Thu Oct  3 18:01:35 2002
+++ dlls/comctl32/listview.c	Thu Oct  3 23:53:11 2002
@@ -4871,10 +4871,20 @@
 	/* if we need to callback, do it now */
 	if ((lpLVItem->mask & ~LVIF_STATE) || infoPtr->uCallbackMask)
 	{
-	    memcpy(&dispInfo.item, lpLVItem, sizeof(LVITEMW));
-	    dispInfo.item.stateMask &= infoPtr->uCallbackMask;
+	    /* NOTE: copy only fields which we _know_ are initialized, some apps
+	     *       depend on the uninitialized fields being 0 */
+	    dispInfo.item.mask = lpLVItem->mask;
+	    dispInfo.item.iItem = lpLVItem->iItem;
+	    dispInfo.item.iSubItem = lpLVItem->iSubItem;
+	    if (lpLVItem->mask & LVIF_TEXT)
+	    {
+		dispInfo.item.pszText = lpLVItem->pszText;
+		dispInfo.item.cchTextMax = lpLVItem->cchTextMax;		
+	    }
+	    if (lpLVItem->mask & LVIF_STATE)
+	        dispInfo.item.stateMask = lpLVItem->stateMask & infoPtr->uCallbackMask;
 	    notify_dispinfoT(infoPtr, LVN_GETDISPINFOW, &dispInfo, isW);
-	    memcpy(lpLVItem, &dispInfo.item, sizeof(LVITEMW));      
+	    *lpLVItem = dispInfo.item;
 	    TRACE("   getdispinfo(1):lpLVItem=%s\n", debuglvitem_t(lpLVItem, isW));
 	}
 





More information about the wine-patches mailing list