summaryrefslogtreecommitdiff
path: root/libattr/libattr.c
diff options
context:
space:
mode:
Diffstat (limited to 'libattr/libattr.c')
-rw-r--r--libattr/libattr.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/libattr/libattr.c b/libattr/libattr.c
index 8180c3f..d550e10 100644
--- a/libattr/libattr.c
+++ b/libattr/libattr.c
@@ -290,7 +290,7 @@ attr_list(const char *path, char *buffer, const int buffersize, int flags,
{
const char *l;
int length, vlength, count = 0;
- char lbuf[MAXLISTLEN];
+ char lbuf[MAXLISTLEN+1];
char name[MAXNAMELEN+16];
int start_offset, end_offset;
@@ -301,11 +301,12 @@ attr_list(const char *path, char *buffer, const int buffersize, int flags,
bzero(buffer, sizeof(attrlist_t));
if (flags & ATTR_DONTFOLLOW)
- length = llistxattr(path, lbuf, sizeof(lbuf));
+ length = llistxattr(path, lbuf, sizeof(lbuf) - 1);
else
- length = listxattr(path, lbuf, sizeof(lbuf));
+ length = listxattr(path, lbuf, sizeof(lbuf) - 1);
if (length <= 0)
return length;
+ lbuf[length] = 0; /* not supposed to be necessary */
start_offset = sizeof(attrlist_t);
end_offset = buffersize & ~(8-1); /* 8 byte align */
@@ -340,7 +341,7 @@ attr_listf(int fd, char *buffer, const int buffersize, int flags,
{
const char *l;
int length, vlength, count = 0;
- char lbuf[MAXLISTLEN];
+ char lbuf[MAXLISTLEN+1];
char name[MAXNAMELEN+16];
int start_offset, end_offset;
@@ -350,9 +351,10 @@ attr_listf(int fd, char *buffer, const int buffersize, int flags,
}
bzero(buffer, sizeof(attrlist_t));
- length = flistxattr(fd, lbuf, sizeof(lbuf));
+ length = flistxattr(fd, lbuf, sizeof(lbuf) - 1);
if (length < 0)
return length;
+ lbuf[length] = 0; /* not supposed to be necessary */
start_offset = sizeof(attrlist_t);
end_offset = buffersize & ~(8-1); /* 8 byte align */