summaryrefslogtreecommitdiff
path: root/src/data.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2018-03-29 10:16:29 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2018-03-29 11:03:07 -0700
commit6b3d01dad415230ad0bd0d01a05351d7a8b0e8c3 (patch)
treed49bf4520d6afc830aa9d016be3d57349b251c4f /src/data.c
parent3409fe0362c52127c52f854a7300f4dde4b8fffe (diff)
downloademacs-6b3d01dad415230ad0bd0d01a05351d7a8b0e8c3.tar.gz
Lisp reader now checks for integer overflow
* doc/lispref/numbers.texi (Integer Basics), etc/NEWS: Document this. * src/lisp.h (S2N_IGNORE_TRAILING, S2N_OVERFLOW_TO_FLOAT): New constants. * src/lread.c (string_to_number): Change trailing bool arg to integer argument with flags, to support S2N_OVERFLOW_TO_FLOAT. All uses changed. * test/src/editfns-tests.el (read-large-integer): New test.
Diffstat (limited to 'src/data.c')
-rw-r--r--src/data.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/data.c b/src/data.c
index a7fab1ef58a..6f23a26757a 100644
--- a/src/data.c
+++ b/src/data.c
@@ -2716,9 +2716,7 @@ present, base 10 is used. BASE must be between 2 and 16 (inclusive).
If the base used is not 10, STRING is always parsed as an integer. */)
(register Lisp_Object string, Lisp_Object base)
{
- register char *p;
- register int b;
- Lisp_Object val;
+ int b;
CHECK_STRING (string);
@@ -2732,11 +2730,12 @@ If the base used is not 10, STRING is always parsed as an integer. */)
b = XINT (base);
}
- p = SSDATA (string);
+ char *p = SSDATA (string);
while (*p == ' ' || *p == '\t')
p++;
- val = string_to_number (p, b, true);
+ int flags = S2N_IGNORE_TRAILING | S2N_OVERFLOW_TO_FLOAT;
+ Lisp_Object val = string_to_number (p, b, flags);
return NILP (val) ? make_number (0) : val;
}