From: Michael Vrable Date: Sat, 8 Aug 2009 02:28:31 +0000 (-0700) Subject: Fix a segfault-causing bug when converting a numeric group to a name fails. X-Git-Url: https://git.vrable.net/?a=commitdiff_plain;h=f6d3d525bf2c0afa0190e767f6de575cdbd5bcfd;p=cumulus.git Fix a segfault-causing bug when converting a numeric group to a name fails. The original code had a copy-and-paste bug when converting a numeric group id into a symbolic group name: rather than checking that getgrgid returned a valid result, it checked the result of getpwuid. If any files in the backup snapshot belonged to a non-existent group, this resulted in a segfault. Problem found and patch provided by Chris Wilson . --- diff --git a/scandir.cc b/scandir.cc index d775219..f902fa0 100644 --- a/scandir.cc +++ b/scandir.cc @@ -357,12 +357,12 @@ void dump_inode(const string& path, // Path within snapshot file_info["volatile"] = "1"; struct passwd *pwd = getpwuid(stat_buf.st_uid); - if (pwd != NULL) { + if (pwd != NULL && pwd->pw_name != NULL) { file_info["user"] += " (" + uri_encode(pwd->pw_name) + ")"; } struct group *grp = getgrgid(stat_buf.st_gid); - if (pwd != NULL) { + if (grp != NULL && grp->gr_name != NULL) { file_info["group"] += " (" + uri_encode(grp->gr_name) + ")"; }