diff options
-rw-r--r-- | libattr/libattr.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/libattr/libattr.c b/libattr/libattr.c index 35bd877..e68d3f6 100644 --- a/libattr/libattr.c +++ b/libattr/libattr.c @@ -317,7 +317,11 @@ attr_list(const char *path, char *buffer, const int buffersize, int flags, continue; if (attr_list_pack(name, vlength, buffer, buffersize, &start_offset, &end_offset)) { - cursor->opaque[0] = count; + if (cursor->opaque[0] == count - 1) { + errno = EINVAL; + return -1; + } + cursor->opaque[0] = count - 1; break; } } @@ -357,7 +361,11 @@ attr_listf(int fd, char *buffer, const int buffersize, int flags, continue; if (attr_list_pack(name, vlength, buffer, buffersize, &start_offset, &end_offset)) { - cursor->opaque[0] = count; + if (cursor->opaque[0] == count - 1) { + errno = EINVAL; + return -1; + } + cursor->opaque[0] = count - 1; break; } } |