aboutsummaryrefslogtreecommitdiffstats
path: root/lib-src/pop.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib-src/pop.c')
-rw-r--r--lib-src/pop.c35
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