From: Brad King Date: Mon, 16 Nov 2009 16:29:18 +0000 (-0500) Subject: Initialize passwd/group lookup result X-Git-Tag: v2.8.0~157 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=26b399c3f7b3d8737400037a591718f84bee0c1b;p=thirdparty%2Flibarchive.git 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. SVN-Revision: 1658 --- diff --git a/libarchive/archive_read_disk_set_standard_lookup.c b/libarchive/archive_read_disk_set_standard_lookup.c index 60054f918..dc2f67f8f 100644 --- a/libarchive/archive_read_disk_set_standard_lookup.c +++ b/libarchive/archive_read_disk_set_standard_lookup.c @@ -195,6 +195,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 arg. */ r = getpwuid_r((uid_t)id, &pwent, cache->buff, cache->buff_size, &result); if (r == 0) @@ -243,6 +244,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 arg. */ r = getgrgid_r((gid_t)id, &grent, cache->buff, cache->buff_size, &result); if (r == 0) diff --git a/libarchive/archive_write_disk_set_standard_lookup.c b/libarchive/archive_write_disk_set_standard_lookup.c index e41d61b12..275979003 100644 --- a/libarchive/archive_write_disk_set_standard_lookup.c +++ b/libarchive/archive_write_disk_set_standard_lookup.c @@ -125,6 +125,7 @@ lookup_gid(void *private_data, const char *gname, gid_t gid) int r; for (;;) { + result = &grent; /* Old getgrnam_r ignores last arg. */ r = getgrnam_r(gname, &grent, buffer, bufsize, &result); if (r == 0) break; @@ -184,6 +185,7 @@ lookup_uid(void *private_data, const char *uname, uid_t uid) int r; for (;;) { + result = &pwent; /* Old getpwnam_r ignores last arg. */ r = getpwnam_r(uname, &pwent, buffer, bufsize, &result); if (r == 0) break;