]> git.eshelyaron.com Git - emacs.git/commitdiff
(pop_stat, pop_last): Check validity of string-to-integer
authorChong Yidong <cyd@stupidchicken.com>
Thu, 10 Jan 2008 15:25:28 +0000 (15:25 +0000)
committerChong Yidong <cyd@stupidchicken.com>
Thu, 10 Jan 2008 15:25:28 +0000 (15:25 +0000)
conversion.  Mistakes spotted by Nico Golde.

lib-src/pop.c

index e8cf42b320a13bc6e35c325f1e6e723784bd4aae..5dc5de75583eab66c032e9fbdd84d766e6c4b85f 100644 (file)
@@ -352,6 +352,7 @@ pop_stat (server, count, size)
      int *size;
 {
   char *fromserver;
+  char *end_ptr;
 
   if (server->in_multi)
     {
@@ -377,7 +378,15 @@ pop_stat (server, count, size)
       return (-1);
     }
 
-  *count = atoi (&fromserver[4]);
+  errno = 0;
+  *count = strtol (&fromserver[4], &end_ptr, 10);
+  /* Check validity of string-to-integer conversion. */
+  if (fromserver[4] == 0 || *end_ptr != 0 || errno)
+    {
+      strcpy (pop_error, "Unexpected response from POP server in pop_stat");
+      pop_trash (server);
+      return (-1);
+    }
 
   fromserver = index (&fromserver[4], ' ');
   if (! fromserver)
@@ -388,7 +397,14 @@ pop_stat (server, count, size)
       return (-1);
     }
 
-  *size = atoi (fromserver + 1);
+  errno = 0;
+  *size = strtol (fromserver + 1, &end_ptr, 10);
+  if (*(fromserver + 1) == 0 || *end_ptr != 0 || errno)
+    {
+      strcpy (pop_error, "Unexpected response from POP server in pop_stat");
+      pop_trash (server);
+      return (-1);
+    }
 
   return (0);
 }
@@ -913,7 +929,17 @@ pop_last (server)
     }
   else
     {
-      return (atoi (&fromserver[4]));
+      char *end_ptr;
+      int count;
+      errno = 0;
+      count = strtol (&fromserver[4], &end_ptr, 10);
+      if (fromserver[4] == 0 || *end_ptr != 0 || errno)
+       {
+         strcpy (pop_error, "Unexpected response from server in pop_last");
+         pop_trash (server);
+         return (-1);
+       }
+      return count;
     }
 }