From: Paul Eggert <eggert@cs.ucla.edu>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 30408-done@debbugs.gnu.org, David Sitsky <david.sitsky@gmail.com>
Subject: bug#30408: Checking for loss of information on integer conversion
Date: Thu, 29 Mar 2018 11:09:45 -0700 [thread overview]
Message-ID: <a1fb3c53-0f49-901b-932a-d035fe03deba@cs.ucla.edu> (raw)
In-Reply-To: <83605fdtm9.fsf@gnu.org>
[-- Attachment #1: Type: text/plain, Size: 696 bytes --]
On 03/29/2018 04:11 AM, Eli Zaretskii wrote:
> I'd suggest, for a good measure, to have a variable which would force
> the conversion to floats, avoiding an error even without the trailing
> period. We can later remove that variable, or make it a no-op, if the
> danger of breaking existing code turns out low or non-existent.
OK, I did that, by installing the attached into master, after installing
the proposed patch.
As a result, unless the user sets the new variable
read-integer-overflow-as-float, the Lisp reader now rejects the program
(format "%x" 2738188573457603759) by signaling an overflow error. As
this was the basis of the original bug report, I'm marking the bug as done.
[-- Attachment #2: 0001-New-experimental-variable-read-integer-overflow-as-f.patch --]
[-- Type: text/x-patch, Size: 2597 bytes --]
From c213f465ba8038ce93314b96fd53ec3e35d34609 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Thu, 29 Mar 2018 11:01:38 -0700
Subject: [PATCH] New experimental variable read-integer-overflow-as-float.
Following a suggestion by Eli Zaretskii (Bug#30408#46).
* etc/NEWS: Mention it.
* src/lread.c (syms_of_lread): Add it.
(read1): Treat out-of-range integers as floats if
read-integer-overflow-as-float is non-nil.
---
etc/NEWS | 6 ++++--
src/lread.c | 11 ++++++++++-
2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/etc/NEWS b/etc/NEWS
index 9161f2bd32..9dddc90213 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -356,8 +356,10 @@ implementation to format (Bug#30408).
** The Lisp reader now signals an overflow for plain decimal integers
that do not end in '.' and are outside Emacs range. Formerly the Lisp
reader silently converted them to floating-point numbers, and signaled
-overflow only for integers with a radix that are outside machine range
-(Bug#30408).
+overflow only for integers with a radix that are outside machine range.
+To get the old behavior, set the new, experimental variable
+read-integer-overflow-as-float to t and please email
+30408@debbugs.gnu.org if you need that. (Bug#30408).
---
** Some functions and variables obsolete since Emacs 22 have been removed:
diff --git a/src/lread.c b/src/lread.c
index a774524ee4..8fb61f5633 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -3502,7 +3502,9 @@ read1 (Lisp_Object readcharfun, int *pch, bool first_in_list)
if (!quoted && !uninterned_symbol)
{
- Lisp_Object result = string_to_number (read_buffer, 10, 0);
+ int flags = (read_integer_overflow_as_float
+ ? S2N_OVERFLOW_TO_FLOAT : 0);
+ Lisp_Object result = string_to_number (read_buffer, 10, flags);
if (! NILP (result))
return unbind_to (count, result);
}
@@ -4830,6 +4832,13 @@ were read in. */);
doc: /* Non-nil means read recursive structures using #N= and #N# syntax. */);
Vread_circle = Qt;
+ DEFVAR_BOOL ("read-integer-overflow-as-float",
+ read_integer_overflow_as_float,
+ doc: /* Non-nil means `read' quietly treats an out-of-range integer as floating point.
+Nil (the default) means signal an overflow unless the integer ends in `.'.
+This variable is experimental; email 30408@debbugs.gnu.org if you need it. */);
+ read_integer_overflow_as_float = false;
+
DEFVAR_LISP ("load-path", Vload_path,
doc: /* List of directories to search for files to load.
Each element is a string (directory file name) or nil (meaning
--
2.14.3
next prev parent reply other threads:[~2018-03-29 18:09 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-18 1:27 Checking for loss of information on integer conversion Paul Eggert
[not found] ` <83y3jq9q4m.fsf@gnu.org>
2018-02-18 20:04 ` bug#30408: " Paul Eggert
2018-02-18 20:04 ` Paul Eggert
2018-02-18 20:24 ` bug#30408: " Eli Zaretskii
2018-02-18 20:24 ` Eli Zaretskii
2018-03-09 5:00 ` bug#30408: " Paul Eggert
2018-03-09 8:22 ` Eli Zaretskii
2018-03-21 19:13 ` Paul Eggert
2018-03-21 19:29 ` Eli Zaretskii
2018-02-18 21:52 ` Drew Adams
2018-03-27 23:19 ` Paul Eggert
2018-03-29 11:11 ` Eli Zaretskii
2018-03-29 18:09 ` Paul Eggert [this message]
2018-02-18 22:31 ` Juliusz Chroboczek
2018-02-18 22:41 ` Stefan Monnier
2018-02-18 23:46 ` Juliusz Chroboczek
2018-02-19 1:47 ` Stefan Monnier
2018-02-19 2:22 ` Paul Eggert
2018-02-19 3:20 ` Drew Adams
2018-02-19 15:05 ` Richard Stallman
2018-02-22 16:31 ` Juliusz Chroboczek
2018-02-22 17:01 ` Eli Zaretskii
2018-02-22 19:31 ` Stefan Monnier
2018-02-23 9:49 ` Richard Stallman
2018-02-19 6:03 ` John Wiegley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a1fb3c53-0f49-901b-932a-d035fe03deba@cs.ucla.edu \
--to=eggert@cs.ucla.edu \
--cc=30408-done@debbugs.gnu.org \
--cc=david.sitsky@gmail.com \
--cc=eliz@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.