HEADER_GetItemA/W should handle message even if index is invalid

Evan Deaubl wine at warpedview.com
Sat Jan 8 16:18:55 CST 2005


ChangeLog:
* GetItemA/W on header controls should handle message even if index is invalid

--- dlls/comctl32/header.c	6 Nov 2004 03:49:03 -0000	1.67
+++ dlls/comctl32/header.c	8 Jan 2005 21:49:57 -0000
@@ -688,29 +688,36 @@

     if (!phdi)
 	return FALSE;
-    if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem))
-        return FALSE;

     TRACE("[nItem=%d]\n", nItem);

     if (phdi->mask == 0)
 	return TRUE;

-    lpItem = &infoPtr->items[nItem];
+    if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem)) {
+        lpItem = NULL;
+    }
+    else {
+        lpItem = &infoPtr->items[nItem];
+    }
+
     if (phdi->mask & HDI_BITMAP)
-	phdi->hbm = lpItem->hbm;
+	phdi->hbm = (lpItem != NULL) ? lpItem->hbm : 0;

     if (phdi->mask & HDI_FORMAT)
-	phdi->fmt = lpItem->fmt;
+	phdi->fmt = (lpItem != NULL) ? lpItem->fmt : 0;

     if (phdi->mask & HDI_WIDTH)
-	phdi->cxy = lpItem->cxy;
+	phdi->cxy = (lpItem != NULL) ? lpItem->cxy : 0;

     if (phdi->mask & HDI_LPARAM)
-	phdi->lParam = lpItem->lParam;
+	phdi->lParam = (lpItem != NULL) ? lpItem->lParam : 0;

     if (phdi->mask & HDI_TEXT) {
-	if (lpItem->pszText != LPSTR_TEXTCALLBACKW) {
+	if (lpItem == NULL) {
+	    *phdi->pszText = 0;
+	}
+	else if (lpItem->pszText != LPSTR_TEXTCALLBACKW) {
 	    if (lpItem->pszText)
 		WideCharToMultiByte (CP_ACP, 0, lpItem->pszText, -1,
 				     phdi->pszText, phdi->cchTextMax, NULL, NULL);
@@ -722,10 +729,10 @@
     }

     if (phdi->mask & HDI_IMAGE)
-	phdi->iImage = lpItem->iImage;
+	phdi->iImage = (lpItem != NULL) ? lpItem->iImage : 0;

     if (phdi->mask & HDI_ORDER)
-	phdi->iOrder = lpItem->iOrder;
+	phdi->iOrder = (lpItem != NULL) ? lpItem->iOrder : 0;

     return TRUE;
 }
@@ -741,29 +748,36 @@

     if (!phdi)
 	return FALSE;
-    if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem))
-        return FALSE;

     TRACE("[nItem=%d]\n", nItem);

     if (phdi->mask == 0)
 	return TRUE;

-    lpItem = &infoPtr->items[nItem];
+    if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem)) {
+        lpItem = NULL;
+    }
+    else {
+        lpItem = &infoPtr->items[nItem];
+    }
+
     if (phdi->mask & HDI_BITMAP)
-	phdi->hbm = lpItem->hbm;
+	phdi->hbm = (lpItem != NULL) ? lpItem->hbm : 0;

     if (phdi->mask & HDI_FORMAT)
-	phdi->fmt = lpItem->fmt;
+	phdi->fmt = (lpItem != NULL) ? lpItem->fmt : 0;

     if (phdi->mask & HDI_WIDTH)
-	phdi->cxy = lpItem->cxy;
+	phdi->cxy = (lpItem != NULL) ? lpItem->cxy : 0;

     if (phdi->mask & HDI_LPARAM)
-	phdi->lParam = lpItem->lParam;
+	phdi->lParam = (lpItem != NULL) ? lpItem->lParam : 0;

     if (phdi->mask & HDI_TEXT) {
-	if (lpItem->pszText != LPSTR_TEXTCALLBACKW) {
+	if (lpItem == NULL) {
+	    *phdi->pszText = 0;
+	}
+	else if (lpItem->pszText != LPSTR_TEXTCALLBACKW) {
 	    if (lpItem->pszText)
 	        lstrcpynW (phdi->pszText, lpItem->pszText, phdi->cchTextMax);
 	    else
@@ -774,10 +788,10 @@
     }

     if (phdi->mask & HDI_IMAGE)
-	phdi->iImage = lpItem->iImage;
+	phdi->iImage = (lpItem != NULL) ? lpItem->iImage : 0;

     if (phdi->mask & HDI_ORDER)
-	phdi->iOrder = lpItem->iOrder;
+	phdi->iOrder = (lpItem != NULL) ? lpItem->iOrder : 0;

     return TRUE;
 }




More information about the wine-patches mailing list