summaryrefslogtreecommitdiff
path: root/src/metaentry.c
diff options
context:
space:
mode:
authorPrzemyslaw Pawelczyk <przemoc@gmail.com>2016-01-12 01:04:13 +0100
committerPrzemyslaw Pawelczyk <przemoc@gmail.com>2016-01-12 01:04:13 +0100
commit98e73203bf9df504cd45baab0bee63c6fe7a14df (patch)
tree95adb27f7569174e46c9cbd8e992922d067cc01b /src/metaentry.c
parentd534dd28eb3f02120087b127bb7738233a752a31 (diff)
metaentry.c: Fix meta entry handling in case of xattr errors.
getxattr() call can fail in mentry_create(), so NULL-initialize mentry->xattr_values[i] and update mentry->xattrs upon error, so there is no attempt in mentry_free() to free unitialized xattr_names[i] and xattr_values[i] pointers. Fixes #38.
Diffstat (limited to 'src/metaentry.c')
-rw-r--r--src/metaentry.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/metaentry.c b/src/metaentry.c
index fdb7f71..25bb00f 100644
--- a/src/metaentry.c
+++ b/src/metaentry.c
@@ -266,11 +266,14 @@ mentry_create(const char *path)
continue;
mentry->xattr_names[i] = xstrdup(attr);
+ mentry->xattr_values[i] = NULL;
+
vsize = getxattr(path, attr, NULL, 0);
if (vsize < 0) {
msg(MSG_ERROR, "getxattr failed for %s: %s\n",
path, strerror(errno));
free(list);
+ mentry->xattrs = i + 1;
mentry_free(mentry);
return NULL;
}
@@ -283,6 +286,7 @@ mentry_create(const char *path)
msg(MSG_ERROR, "getxattr failed for %s: %s\n",
path, strerror(errno));
free(list);
+ mentry->xattrs = i + 1;
mentry_free(mentry);
return NULL;
}