attempt to fix crash in DeleteAllItems()

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18849 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2003-01-21 18:56:31 +00:00
parent e7b6ce1cf9
commit 7eb833e673

View File

@ -1752,7 +1752,7 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
// there's a GPF in Windows.
// By returning TRUE here, we avoid further processing
// of this strange message.
if (info->iItem > GetColumnCount())
if ( info->iItem >= GetColumnCount() )
return TRUE;
}
// fall through
@ -1779,8 +1779,32 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
case LVN_COLUMNCLICK:
case LVN_ITEMCHANGED:
case LVN_ITEMCHANGING:
if ( iItem != -1 )
if ( item != -1 )
{
if ( iItem >= GetItemCount() )
{
// there is apparently a bug in comctl32.dll version
// 5.50.4704.1100 (note that the MS DLL database
// doesn't say what this version is, it's not the one
// shipped with W2K although the bug was reported under
// that system) and it sends us LVN_ITEMCHANGING
// notifications with the item out of range -- and as
// we access the items client data, we crash below
//
// see
//
// http://lists.wxwindows.org/cgi-bin/ezmlm-cgi?8:mss:29852:knlihdmadhaljafjajei
//
// and the thread continuation for more details
// (although note that the bug may be present in other
// versions of comctl32.dll as well as it has been
// reported quite a few times)
//
// to fix this, simply ignore these "bad" events (as
// above with HDN_GETDISPINFOW)
return TRUE;
}
wxListItemInternalData *internaldata =
(wxListItemInternalData *) nmLV->lParam;