X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=libbb%2Fxgetlarg.c;h=56fb60e823313d9cfcdd32dd916e519ba94b58ee;hb=aff114c33d2b8879233fa513e6d760d0ef99b632;hp=598b0b3d6fb21d235dc8fc71eed7154d582ab19d;hpb=6067c08145a7c69b251e3ae002334bc4953f81c2;p=oweals%2Fbusybox.git diff --git a/libbb/xgetlarg.c b/libbb/xgetlarg.c index 598b0b3d6..56fb60e82 100644 --- a/libbb/xgetlarg.c +++ b/libbb/xgetlarg.c @@ -1,6 +1,6 @@ /* vi: set sw=4 ts=4: */ /* - * Copyright (C) 2003 Erik Andersen + * Copyright (C) 2003-2004 Erik Andersen */ @@ -9,20 +9,27 @@ #include #include #include +#include #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; }