diff options
author | Jeremy Allison <jra@samba.org> | 2011-05-03 14:15:04 -0700 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2011-05-04 12:12:14 -0700 |
commit | 2938fe6f90471e8fabf583a5eb585597381df97d (patch) | |
tree | 5147a973d0b742feef3f32407846ef1f34f7efac | |
parent | e4667926ce752775e9ba1108c4cb41d6f97a04fa (diff) | |
download | samba-2938fe6f90471e8fabf583a5eb585597381df97d.tar.gz samba-2938fe6f90471e8fabf583a5eb585597381df97d.tar.bz2 samba-2938fe6f90471e8fabf583a5eb585597381df97d.zip |
Fold null terminator into listlen length, change to strlcpy.
-rw-r--r-- | source3/lib/system.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/source3/lib/system.c b/source3/lib/system.c index 74a8971c53..292965f47f 100644 --- a/source3/lib/system.c +++ b/source3/lib/system.c @@ -2376,7 +2376,7 @@ static ssize_t solaris_list_xattr(int attrdirfd, char *list, size_t size) dirp = fdopendir(newfd); while ((de = readdir(dirp))) { - size_t listlen = strlen(de->d_name); + size_t listlen = strlen(de->d_name) + 1; if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) { /* we don't want "." and ".." here: */ DEBUG(10,("skipped EA %s\n",de->d_name)); @@ -2385,18 +2385,16 @@ static ssize_t solaris_list_xattr(int attrdirfd, char *list, size_t size) if (size == 0) { /* return the current size of the list of extended attribute names*/ - len += listlen + 1; + len += listlen; } else { /* check size and copy entrieѕ + nul into list. */ - if ((len + listlen + 1) > size) { + if ((len + listlen) > size) { errno = ERANGE; len = -1; break; } else { - safe_strcpy(list + len, de->d_name, listlen); + strlcpy(list + len, de->d_name, listlen); len += listlen; - list[len] = '\0'; - ++len; } } } |