diff --git a/docs/examples/chkspeed.c b/docs/examples/chkspeed.c index d802469b8..00db5bf1d 100644 --- a/docs/examples/chkspeed.c +++ b/docs/examples/chkspeed.c @@ -71,7 +71,7 @@ int main(int argc, char *argv[]) } else if (strncasecmp(*argv, "-T", 2) == 0) { prttime = 1; } else if (strncasecmp(*argv, "-M=", 3) == 0) { - int m = atoi(*argv + 3); + long m = strtol(argv+3, NULL, 10); switch(m) { case 1: url = URL_1M; break; diff --git a/lib/cookie.c b/lib/cookie.c index 21617adce..c6460a100 100644 --- a/lib/cookie.c +++ b/lib/cookie.c @@ -353,8 +353,8 @@ Curl_cookie_add(struct SessionHandle *data, break; } co->expires = - atoi((*co->maxage=='\"')?&co->maxage[1]:&co->maxage[0]) + - (long)now; + strtol((*co->maxage=='\"')?&co->maxage[1]:&co->maxage[0],NULL,10) + + (long)now; } else if(Curl_raw_equal("expires", name)) { strstore(&co->expirestr, whatptr); diff --git a/lib/ftp.c b/lib/ftp.c index 5c0be38f5..0558e0563 100644 --- a/lib/ftp.c +++ b/lib/ftp.c @@ -379,7 +379,7 @@ static int ftp_endofresp(struct pingpong *pp, size_t len = pp->nread_resp; if((len > 3) && LASTLINE(line)) { - *code = atoi(line); + *code = strtol(line, NULL, 10); return 1; } return 0; diff --git a/lib/ldap.c b/lib/ldap.c index d6556c905..529e45212 100644 --- a/lib/ldap.c +++ b/lib/ldap.c @@ -473,7 +473,7 @@ static void _ldap_trace (const char *fmt, ...) if(do_trace == -1) { const char *env = getenv("CURL_TRACE"); - do_trace = (env && atoi(env) > 0); + do_trace = (env && strtol(env, NULL, 10) > 0); } if(!do_trace) return; diff --git a/lib/smtp.c b/lib/smtp.c index 55e03d5a7..5ccdcb671 100644 --- a/lib/smtp.c +++ b/lib/smtp.c @@ -226,7 +226,7 @@ static int smtp_endofresp(struct pingpong *pp, int *resp) return FALSE; /* Nothing for us. */ if((result = line[3] == ' ')) - *resp = atoi(line); + *resp = strtol(line, NULL, 10); line += 4; len -= 4; diff --git a/lib/url.c b/lib/url.c index e915c7947..0aed7b44b 100644 --- a/lib/url.c +++ b/lib/url.c @@ -4155,7 +4155,7 @@ static CURLcode parse_proxy(struct SessionHandle *data, *prox_portno = 0x0; /* cut off number from host name */ prox_portno ++; /* now set the local port number */ - conn->port = atoi(prox_portno); + conn->port = strtol(prox_portno, NULL, 10); } else { /* without a port number after the host name, some people seem to use diff --git a/src/main.c b/src/main.c index 2f81ef4e8..7a6c1c8b3 100644 --- a/src/main.c +++ b/src/main.c @@ -1509,12 +1509,15 @@ static void cleanarg(char *str) static int str2num(long *val, const char *str) { - int retcode = 0; - if(str && ISDIGIT(*str)) - *val = atoi(str); - else - retcode = 1; /* badness */ - return retcode; + if(str && ISDIGIT(*str)) { + char *endptr; + long num = strtol(str, &endptr, 10); + if((endptr != str) && (endptr == str + strlen(str))) { + *val = num; + return 0; /* Ok */ + } + } + return 1; /* badness */ } /* @@ -3711,7 +3714,12 @@ void progressbarinit(struct ProgressData *bar, * we're using our own way to determine screen width */ colp = curlx_getenv("COLUMNS"); if(colp != NULL) { - bar->width = atoi(colp); + char *endptr; + long num = strtol(colp, &endptr, 10); + if((endptr != colp) && (endptr == colp + strlen(colp)) && (num > 0)) + bar->width = (int)num; + else + bar->width = 79; curl_free(colp); } else @@ -4513,7 +4521,10 @@ operate(struct Configurable *config, int argc, argv_item_t argv[]) } env = curlx_getenv("CURL_MEMLIMIT"); if(env) { - curl_memlimit(atoi(env)); + char *endptr; + long num = strtol(env, &endptr, 10); + if((endptr != env) && (endptr == env + strlen(env)) && (num > 0)) + curl_memlimit(num); curl_free(env); } #endif diff --git a/tests/libtest/first.c b/tests/libtest/first.c index 770f9d527..a0e713f48 100644 --- a/tests/libtest/first.c +++ b/tests/libtest/first.c @@ -59,7 +59,10 @@ int main(int argc, char **argv) /* this enables the fail-on-alloc-number-N functionality */ env = curl_getenv("CURL_MEMLIMIT"); if(env) { - curl_memlimit(atoi(env)); + char *endptr; + long num = strtol(env, &endptr, 10); + if((endptr != env) && (endptr == env + strlen(env)) && (num > 0)) + curl_memlimit(num); curl_free(env); } #endif diff --git a/tests/libtest/lib521.c b/tests/libtest/lib521.c index a4ae5558a..9e79cb41e 100644 --- a/tests/libtest/lib521.c +++ b/tests/libtest/lib521.c @@ -28,7 +28,7 @@ int test(char *URL) } test_setopt(curl, CURLOPT_URL, URL); - test_setopt(curl, CURLOPT_PORT, atoi(libtest_arg2)); + test_setopt(curl, CURLOPT_PORT, strtol(libtest_arg2, NULL, 10)); test_setopt(curl, CURLOPT_USERPWD, "xxx:yyy"); test_setopt(curl, CURLOPT_VERBOSE, 1L); diff --git a/tests/libtest/lib562.c b/tests/libtest/lib562.c index d78ecce25..acdd79aab 100644 --- a/tests/libtest/lib562.c +++ b/tests/libtest/lib562.c @@ -57,7 +57,7 @@ int test(char *URL) test_setopt(curl, CURLOPT_VERBOSE, 1L); /* set port number */ - test_setopt(curl, CURLOPT_PORT, atoi(libtest_arg2) ); + test_setopt(curl, CURLOPT_PORT, strtol(libtest_arg2, NULL, 10)); /* specify target */ test_setopt(curl,CURLOPT_URL, URL); diff --git a/tests/server/rtspd.c b/tests/server/rtspd.c index d2471b998..f751f1153 100644 --- a/tests/server/rtspd.c +++ b/tests/server/rtspd.c @@ -531,8 +531,8 @@ static int ProcessRequest(struct httprequest *req) /* if the host name starts with test, the port number used in the CONNECT line will be used as test number! */ char *portp = strchr(doc, ':'); - if(portp) - req->testno = atoi(portp+1); + if(portp && (*(portp+1) != '\0') && ISDIGIT(*(portp+1))) + req->testno = strtol(portp+1, NULL, 10); else req->testno = DOCNUMBER_CONNECT; } diff --git a/tests/server/sws.c b/tests/server/sws.c index 1650226e6..65a61c2ce 100644 --- a/tests/server/sws.c +++ b/tests/server/sws.c @@ -467,8 +467,8 @@ static int ProcessRequest(struct httprequest *req) /* if the host name starts with test, the port number used in the CONNECT line will be used as test number! */ char *portp = strchr(doc, ':'); - if(portp) - req->testno = atoi(portp+1); + if(portp && (*(portp+1) != '\0') && ISDIGIT(*(portp+1))) + req->testno = strtol(portp+1, NULL, 10); else req->testno = DOCNUMBER_CONNECT; }