diff --git a/libudev/libudev-util-private.c b/libudev/libudev-util-private.c index 2d7f8dc..19b67a4 100644 --- a/libudev/libudev-util-private.c +++ b/libudev/libudev-util-private.c @@ -133,8 +133,8 @@ int util_unlink_secure(struct udev *udev, const char *filename) uid_t util_lookup_user(struct udev *udev, const char *user) { char *endptr; - size_t buflen = sysconf(_SC_GETPW_R_SIZE_MAX); - char buf[buflen]; + long buflen = sysconf(_SC_GETPW_R_SIZE_MAX); + char buf[buflen > 0 ? buflen : 1024]; struct passwd pwbuf; struct passwd *pw; uid_t uid; @@ -158,12 +158,15 @@ uid_t util_lookup_user(struct udev *udev, const char *user) gid_t util_lookup_group(struct udev *udev, const char *group) { char *endptr; - size_t buflen = sysconf(_SC_GETGR_R_SIZE_MAX); + long buflen = sysconf(_SC_GETGR_R_SIZE_MAX); char *buf; struct group grbuf; struct group *gr; gid_t gid = 0; + if (buflen < 0) + buflen = 1024; + if (strcmp(group, "root") == 0) return 0; gid = strtoul(group, &endptr, 10);