Fix a segfault-causing bug when converting a numeric group to a name fails.
authorMichael Vrable <mvrable@cs.ucsd.edu>
Sat, 8 Aug 2009 02:28:31 +0000 (19:28 -0700)
committerMichael Vrable <mvrable@turin.ucsd.edu>
Sat, 8 Aug 2009 02:28:31 +0000 (19:28 -0700)
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 <chris@aptivate.org>.

scandir.cc

index d775219..f902fa0 100644 (file)
@@ -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) + ")";
     }