Nikolay Sivov : comctl32/listview: Fix memory leak on subrange deletion.
Alexandre Julliard
julliard at winehq.org
Thu Jan 7 13:08:33 CST 2010
Module: wine
Branch: master
Commit: 6ca7654ec7e64a2076a6c77b032081767327bd7f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6ca7654ec7e64a2076a6c77b032081767327bd7f
Author: Nikolay Sivov <bunglehead at gmail.com>
Date: Wed Jan 6 22:38:54 2010 +0300
comctl32/listview: Fix memory leak on subrange deletion.
---
dlls/comctl32/listview.c | 12 +++++++-----
1 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index cf7c77a..d98b108 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -3183,28 +3183,30 @@ static BOOL ranges_del(RANGES ranges, RANGE range)
TRACE("(%s)\n", debugrange(&range));
ranges_check(ranges, "before del");
-
+
/* we don't use DPAS_SORTED here, since we need *
* to find the first overlapping range */
index = DPA_Search(ranges->hdpa, &range, 0, ranges_cmp, 0, 0);
- while(index != -1)
+ while(index != -1)
{
chkrgn = DPA_GetPtr(ranges->hdpa, index);
-
- TRACE("Matches range %s @%d\n", debugrange(chkrgn), index);
+
+ TRACE("Matches range %s @%d\n", debugrange(chkrgn), index);
/* case 1: Same range */
if ( (chkrgn->upper == range.upper) &&
(chkrgn->lower == range.lower) )
{
DPA_DeletePtr(ranges->hdpa, index);
+ Free(chkrgn);
break;
}
/* case 2: engulf */
else if ( (chkrgn->upper <= range.upper) &&
- (chkrgn->lower >= range.lower) )
+ (chkrgn->lower >= range.lower) )
{
DPA_DeletePtr(ranges->hdpa, index);
+ Free(chkrgn);
}
/* case 3: overlap upper */
else if ( (chkrgn->upper <= range.upper) &&
More information about the wine-cvs
mailing list