From: Fabian Keil Date: Fri, 26 Feb 2016 12:32:26 +0000 (+0000) Subject: get_number_param(): Simplify code by using strtol() X-Git-Tag: v_3_0_25~136 X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=commitdiff_plain;h=204cd3f81d7b8505d87d7eedf2601ee6e004ec20 get_number_param(): Simplify code by using strtol() --- diff --git a/cgi.c b/cgi.c index 1307b87e..114eae89 100644 --- a/cgi.c +++ b/cgi.c @@ -1,4 +1,4 @@ -const char cgi_rcs[] = "$Id: cgi.c,v 1.159 2014/10/18 11:31:25 fabiankeil Exp $"; +const char cgi_rcs[] = "$Id: cgi.c,v 1.160 2014/10/18 11:31:52 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/cgi.c,v $ @@ -807,8 +807,7 @@ jb_err get_number_param(struct client_state *csp, unsigned *pvalue) { const char *param; - char ch; - unsigned value; + char *endptr; assert(csp); assert(parameters); @@ -823,36 +822,12 @@ jb_err get_number_param(struct client_state *csp, return JB_ERR_CGI_PARAMS; } - /* We don't use atoi because I want to check this carefully... */ - - value = 0; - while ((ch = *param++) != '\0') + *pvalue = (unsigned int)strtol(param, &endptr, 0); + if (*endptr != '\0') { - if ((ch < '0') || (ch > '9')) - { - return JB_ERR_CGI_PARAMS; - } - - ch = (char)(ch - '0'); - - /* Note: - * - * defines UINT_MAX - * - * (UINT_MAX - ch) / 10 is the largest number that - * can be safely multiplied by 10 then have ch added. - */ - if (value > ((UINT_MAX - (unsigned)ch) / 10U)) - { - return JB_ERR_CGI_PARAMS; - } - - value = value * 10 + (unsigned)ch; + return JB_ERR_CGI_PARAMS; } - /* Success */ - *pvalue = value; - return JB_ERR_OK; }