Browse Source

libarchive: Initialize passwd/group lookup result

The "result" argument to functions get(pwu|grg)id_r and get(pw|gr)name_r
does not appear in the signatures provided on older platforms.  We set
the pointer to the result memory in case the function ignores it, thus
ensuring initialization.
Brad King 16 years ago
parent
commit
76f8504596

+ 2 - 0
Utilities/cmlibarchive/libarchive/archive_read_disk_set_standard_lookup.c

@@ -199,6 +199,7 @@ lookup_uname_helper(struct name_cache *cache, id_t id)
     if (cache->buff == NULL)
         return (NULL);
     for (;;) {
+        result = &pwent; /* Old getpwuid_r ignores last argument.  */
         r = getpwuid_r((uid_t)id, &pwent,
                    cache->buff, cache->buff_size, &result);
         if (r == 0)
@@ -247,6 +248,7 @@ lookup_gname_helper(struct name_cache *cache, id_t id)
     if (cache->buff == NULL)
         return (NULL);
     for (;;) {
+        result = &grent; /* Old getgrgid_r ignores last argument.  */
         r = getgrgid_r((gid_t)id, &grent,
                    cache->buff, cache->buff_size, &result);
         if (r == 0)

+ 2 - 0
Utilities/cmlibarchive/libarchive/archive_write_disk_set_standard_lookup.c

@@ -129,6 +129,7 @@ lookup_gid(void *private_data, const char *gname, gid_t gid)
         int r;
 
         for (;;) {
+            result = &grent; /* Old getgrnam_r ignores last argument.  */
             r = getgrnam_r(gname, &grent, buffer, bufsize, &result);
             if (r == 0)
                 break;
@@ -188,6 +189,7 @@ lookup_uid(void *private_data, const char *uname, uid_t uid)
         int r;
 
         for (;;) {
+            result = &pwent; /* Old getpwnam_r ignores last argument.  */
             r = getpwnam_r(uname, &pwent, buffer, bufsize, &result);
             if (r == 0)
                 break;