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 33 34 35 36 37
|
Description: Make sure the strtoul() value is a valid unsigned int
Forwarded: yes
Author: Peter Pentchev <roam@ringlet.net>
Last-Update: 2024-12-12
--- a/unixserver.c
+++ b/unixserver.c
@@ -1,4 +1,5 @@
#include <errno.h>
+#include <limits.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
@@ -99,7 +100,7 @@
exit(1);
}
-static int parseu(const char* str, unsigned* out, int base)
+static int parseul(const char* str, unsigned long* out, int base)
{
char* ptr;
if (!str) return 0;
@@ -108,6 +109,14 @@
return (*ptr == 0) && (errno == 0);
}
+static int parseu(const char* str, unsigned* out, int base)
+{
+ unsigned long ulval;
+ if (!parseul(str, &ulval, base) || ulval > UINT_MAX) return 0;
+ *out = (unsigned)ulval;
+ return 1;
+}
+
static void use_uid(const char* str)
{
if (!str) usage("UID not found in environment.");
|