File: strtoul-max.patch

package info (click to toggle)
ucspi-unix 1.0-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 452 kB
  • sloc: ansic: 2,606; python: 535; makefile: 14; sh: 1
file content (37 lines) | stat: -rw-r--r-- 868 bytes parent folder | download | duplicates (2)
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.");