Larry Doolittle writes:
[oweals/busybox.git] / libbb / xgetlarg.c
index 598b0b3d6fb21d235dc8fc71eed7154d582ab19d..56fb60e823313d9cfcdd32dd916e519ba94b58ee 100644 (file)
@@ -1,6 +1,6 @@
 /* vi: set sw=4 ts=4: */
 /*
- * Copyright (C) 2003 Erik Andersen <andersee@debian.org>
+ * Copyright (C) 2003-2004 Erik Andersen <andersen@codepoet.org>
  */
 
 
@@ -9,20 +9,27 @@
 #include <getopt.h>
 #include <errno.h>
 #include <assert.h>
+#include <ctype.h>
 
 #include "busybox.h"
 
-extern long bb_xgetlarg(char *arg, int base, long lower, long upper)
+extern long bb_xgetlarg(const char *arg, int base, long lower, long upper)
 {
        long result;
        char *endptr;
        int errno_save = errno;
 
        assert(arg!=NULL);
+
+       /* Don't allow leading whitespace. */
+       if ((isspace)(*arg)) {  /* Use an actual funciton call for minimal size. */
+               bb_show_usage();
+       }
+
        errno = 0;
        result = strtol(arg, &endptr, base);
-       if (errno != 0 || *endptr!='\0' || result < lower || result > upper)
-               show_usage();
+       if (errno != 0 || *endptr!='\0' || endptr==arg || result < lower || result > upper)
+               bb_show_usage();
        errno = errno_save;
        return result;
 }