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