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>.
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) + ")";
}