Mercurial > emacs
comparison lib-src/pop.c @ 87700:2e70121a6595
(pop_stat, pop_last): Check validity of string-to-integer
conversion. Mistakes spotted by Nico Golde.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Thu, 10 Jan 2008 15:33:52 +0000 |
parents | 107ccd98fa12 |
children | b394429bd805 |
comparison
equal
deleted
inserted
replaced
87699:9b166b697889 | 87700:2e70121a6595 |
---|---|
350 popserver server; | 350 popserver server; |
351 int *count; | 351 int *count; |
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 { |
358 strcpy (pop_error, "In multi-line query in pop_stat"); | 359 strcpy (pop_error, "In multi-line query in pop_stat"); |
359 return (-1); | 360 return (-1); |
375 pop_trash (server); | 376 pop_trash (server); |
376 } | 377 } |
377 return (-1); | 378 return (-1); |
378 } | 379 } |
379 | 380 |
380 *count = atoi (&fromserver[4]); | 381 errno = 0; |
382 *count = strtol (&fromserver[4], &end_ptr, 10); | |
383 /* Check validity of string-to-integer conversion. */ | |
384 if (fromserver[4] == 0 || *end_ptr != 0 || errno) | |
385 { | |
386 strcpy (pop_error, "Unexpected response from POP server in pop_stat"); | |
387 pop_trash (server); | |
388 return (-1); | |
389 } | |
381 | 390 |
382 fromserver = index (&fromserver[4], ' '); | 391 fromserver = index (&fromserver[4], ' '); |
383 if (! fromserver) | 392 if (! fromserver) |
384 { | 393 { |
385 strcpy (pop_error, | 394 strcpy (pop_error, |
386 "Badly formatted response from server in pop_stat"); | 395 "Badly formatted response from server in pop_stat"); |
387 pop_trash (server); | 396 pop_trash (server); |
388 return (-1); | 397 return (-1); |
389 } | 398 } |
390 | 399 |
391 *size = atoi (fromserver + 1); | 400 errno = 0; |
401 *size = strtol (fromserver + 1, &end_ptr, 10); | |
402 if (*(fromserver + 1) == 0 || *end_ptr != 0 || errno) | |
403 { | |
404 strcpy (pop_error, "Unexpected response from POP server in pop_stat"); | |
405 pop_trash (server); | |
406 return (-1); | |
407 } | |
392 | 408 |
393 return (0); | 409 return (0); |
394 } | 410 } |
395 | 411 |
396 /* | 412 /* |
911 pop_trash (server); | 927 pop_trash (server); |
912 return (-1); | 928 return (-1); |
913 } | 929 } |
914 else | 930 else |
915 { | 931 { |
916 return (atoi (&fromserver[4])); | 932 char *end_ptr; |
933 int count; | |
934 errno = 0; | |
935 count = strtol (&fromserver[4], &end_ptr, 10); | |
936 if (fromserver[4] == 0 || *end_ptr != 0 || errno) | |
937 { | |
938 strcpy (pop_error, "Unexpected response from server in pop_last"); | |
939 pop_trash (server); | |
940 return (-1); | |
941 } | |
942 return count; | |
917 } | 943 } |
918 } | 944 } |
919 | 945 |
920 /* | 946 /* |
921 * Function: pop_reset | 947 * Function: pop_reset |