summaryrefslogtreecommitdiff
path: root/lib/libc/stdlib/strtoll.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/stdlib/strtoll.c')
-rw-r--r--lib/libc/stdlib/strtoll.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/libc/stdlib/strtoll.c b/lib/libc/stdlib/strtoll.c
index 4bcc5565be2..cf82c8e1a6f 100644
--- a/lib/libc/stdlib/strtoll.c
+++ b/lib/libc/stdlib/strtoll.c
@@ -1,5 +1,5 @@
-/* $OpenBSD: strtoll.c,v 1.7 2013/03/28 18:09:38 martynas Exp $ */
-/*-
+/* $OpenBSD: strtoll.c,v 1.8 2014/09/13 20:10:12 schwarze Exp $ */
+/*
* Copyright (c) 1992 The Regents of the University of California.
* All rights reserved.
*
@@ -50,6 +50,17 @@ strtoll(const char *nptr, char **endptr, int base)
int neg, any, cutlim;
/*
+ * Ensure that base is between 2 and 36 inclusive, or the special
+ * value of 0.
+ */
+ if (base < 0 || base == 1 || base > 36) {
+ if (endptr != 0)
+ *endptr = (char *)nptr;
+ errno = EINVAL;
+ return 0;
+ }
+
+ /*
* Skip white space and pick up leading +/- sign if any.
* If base is 0, allow 0x for hex and 0 for octal, else
* assume decimal; if base is already 16, allow 0x.