diff options
Diffstat (limited to 'lib-src/pop.c')
| -rw-r--r-- | lib-src/pop.c | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/lib-src/pop.c b/lib-src/pop.c index 61c90abe2bf..f15a3fb23b6 100644 --- a/lib-src/pop.c +++ b/lib-src/pop.c | |||
| @@ -352,6 +352,7 @@ pop_stat (server, count, size) | |||
| 352 | int *size; | 352 | int *size; |
| 353 | { | 353 | { |
| 354 | char *fromserver; | 354 | char *fromserver; |
| 355 | char *end_ptr; | ||
| 355 | 356 | ||
| 356 | if (server->in_multi) | 357 | if (server->in_multi) |
| 357 | { | 358 | { |
| @@ -377,18 +378,26 @@ pop_stat (server, count, size) | |||
| 377 | return (-1); | 378 | return (-1); |
| 378 | } | 379 | } |
| 379 | 380 | ||
| 380 | *count = atoi (&fromserver[4]); | 381 | errno = 0; |
| 381 | 382 | *count = strtol (&fromserver[4], &end_ptr, 10); | |
| 382 | fromserver = index (&fromserver[4], ' '); | 383 | /* Check validity of string-to-integer conversion. */ |
| 383 | if (! fromserver) | 384 | if (fromserver + 4 == end_ptr || *end_ptr != ' ' || errno) |
| 384 | { | 385 | { |
| 385 | strcpy (pop_error, | 386 | strcpy (pop_error, "Unexpected response from POP server in pop_stat"); |
| 386 | "Badly formatted response from server in pop_stat"); | ||
| 387 | pop_trash (server); | 387 | pop_trash (server); |
| 388 | return (-1); | 388 | return (-1); |
| 389 | } | 389 | } |
| 390 | 390 | ||
| 391 | *size = atoi (fromserver + 1); | 391 | fromserver = end_ptr; |
| 392 | |||
| 393 | errno = 0; | ||
| 394 | *size = strtol (fromserver + 1, &end_ptr, 10); | ||
| 395 | if (fromserver + 1 == end_ptr || errno) | ||
| 396 | { | ||
| 397 | strcpy (pop_error, "Unexpected response from POP server in pop_stat"); | ||
| 398 | pop_trash (server); | ||
| 399 | return (-1); | ||
| 400 | } | ||
| 392 | 401 | ||
| 393 | return (0); | 402 | return (0); |
| 394 | } | 403 | } |
| @@ -913,7 +922,17 @@ pop_last (server) | |||
| 913 | } | 922 | } |
| 914 | else | 923 | else |
| 915 | { | 924 | { |
| 916 | return (atoi (&fromserver[4])); | 925 | char *end_ptr; |
| 926 | int count; | ||
| 927 | errno = 0; | ||
| 928 | count = strtol (&fromserver[4], &end_ptr, 10); | ||
| 929 | if (fromserver + 4 == end_ptr || errno) | ||
| 930 | { | ||
| 931 | strcpy (pop_error, "Unexpected response from server in pop_last"); | ||
| 932 | pop_trash (server); | ||
| 933 | return (-1); | ||
| 934 | } | ||
| 935 | return count; | ||
| 917 | } | 936 | } |
| 918 | } | 937 | } |
| 919 | 938 | ||