read: Avoid signed integer overflow in 'read_decimal_integer'.
authorMark H Weaver <mhw@netris.org>
Tue, 24 Dec 2013 13:00:51 +0000 (08:00 -0500)
committerMark H Weaver <mhw@netris.org>
Thu, 9 Jan 2014 01:57:04 +0000 (20:57 -0500)
* libguile/read.c (read_decimal_integer): Avoid overflow.

libguile/read.c

index 299ab70..b36ecd4 100644 (file)
@@ -1121,6 +1121,9 @@ read_decimal_integer (SCM port, int c, ssize_t *resp)
 
   while ('0' <= c && c <= '9')
     {
+      if (((SSIZE_MAX - (c-'0')) / 10) <= res)
+        scm_i_input_error ("read_decimal_integer", port,
+                           "number too large", SCM_EOL);
       res = 10*res + c-'0';
       got_it = 1;
       c = scm_getc (port);