summaryrefslogtreecommitdiffstats
path: root/main/udev/get_pw_r_size.patch
blob: 3462920dfc89a5678e1c9e77ad6b553e3f648505 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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);