aboutsummaryrefslogtreecommitdiffstats
path: root/xattrs.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2011-09-22 09:02:21 -0700
committerWayne Davison <wayned@samba.org>2011-09-22 09:13:31 -0700
commit15df927ae26ff0c0d2e31f2245ce5848346084a4 (patch)
tree2946b01a7b624ca0bbf299e5a2835dae1917e48f /xattrs.c
parent8adceeb2b38a7f9f6a2c1fc5a5bf2635927a303b (diff)
downloadandroid_external_rsync-15df927ae26ff0c0d2e31f2245ce5848346084a4.tar.gz
android_external_rsync-15df927ae26ff0c0d2e31f2245ce5848346084a4.tar.bz2
android_external_rsync-15df927ae26ff0c0d2e31f2245ce5848346084a4.zip
Fix xattr memory leak. Fixes bug 8475.
Diffstat (limited to 'xattrs.c')
-rw-r--r--xattrs.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/xattrs.c b/xattrs.c
index 3a7cb25b..52c33cda 100644
--- a/xattrs.c
+++ b/xattrs.c
@@ -94,11 +94,14 @@ static void rsync_xal_free(item_list *xalp)
size_t i;
rsync_xa *rxas = xalp->items;
+ if (!xalp->malloced)
+ return;
+
for (i = 0; i < xalp->count; i++) {
free(rxas[i].datum);
/*free(rxas[i].name);*/
}
- xalp->count = 0;
+ free(xalp->items);
}
void free_xattr(stat_x *sxp)
@@ -773,10 +776,8 @@ void uncache_tmp_xattrs(void)
item_list *xattr_start = xattr_item + prior_xattr_count;
xattr_item += rsync_xal_l.count;
rsync_xal_l.count = prior_xattr_count;
- while (xattr_item-- > xattr_start) {
+ while (xattr_item-- > xattr_start)
rsync_xal_free(xattr_item);
- free(xattr_item->items);
- }
prior_xattr_count = (size_t)-1;
}
}