From: Paul Eggert <eggert@cs.ucla.edu>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 8545@debbugs.gnu.org
Subject: bug#8545: issues with recent doprnt-related changes
Date: Wed, 04 May 2011 00:28:18 -0700 [thread overview]
Message-ID: <4DC10012.8020809@cs.ucla.edu> (raw)
In-Reply-To: <83d3k571ee.fsf@gnu.org>
On 04/29/11 04:16, Eli Zaretskii wrote:
> I guess so, yes. I would like to have other opinions, though, so I
> will start a new thread on emacs-devel about that.
It seems from that discussion that strings can contain MOST_POSITIVE_FIXNUM bytes.
Also, that va_arg bug really needs fixing. So I plan to install the following
patch after some more testing. This assumes va_copy exists, which may affect
the Windows port, but a one-line macro should suffice if it doesn't have
va_copy already.
=== modified file 'ChangeLog'
--- ChangeLog 2011-05-04 06:11:49 +0000
+++ ChangeLog 2011-05-04 07:19:21 +0000
@@ -1,5 +1,9 @@
2011-05-04 Paul Eggert <eggert@cs.ucla.edu>
+ Use C99's va_copy to avoid undefined behavior on x86-64 GNU/Linux.
+ * Makefile.in (GNULIB_MODULES): Add stdarg, for va_copy.
+ * lib/stdarg.in.h, m4/stdarg.m4: New files, from gnulib.
+
* Makefile.in (GNULIB_TOOL_FLAG): Add --conditional-dependencies.
This new gnulib-tool option saves 'configure' the trouble of
checking for strtoull when strtoumax exists.
=== modified file 'Makefile.in'
--- Makefile.in 2011-05-04 06:11:49 +0000
+++ Makefile.in 2011-05-04 07:19:21 +0000
@@ -333,7 +333,7 @@
GNULIB_MODULES = \
careadlinkat crypto/md5 dtoastr filemode getloadavg getopt-gnu \
ignore-value intprops lstat mktime readlink \
- socklen stdio strftime strtoumax symlink sys_stat
+ socklen stdarg stdio strftime strtoumax symlink sys_stat
GNULIB_TOOL_FLAGS = \
--conditional-dependencies --import --no-changelog --no-vc-files \
--makefile-name=gnulib.mk
=== modified file 'src/ChangeLog'
--- src/ChangeLog 2011-05-04 06:13:23 +0000
+++ src/ChangeLog 2011-05-04 07:20:46 +0000
@@ -1,5 +1,16 @@
2011-05-04 Paul Eggert <eggert@cs.ucla.edu>
+ * term.c (vfatal): Remove stray call to va_end.
+ It's not needed and the C Standard doesn't allow it here anyway.
+
+ Use C99's va_copy to avoid undefined behavior on x86-64 GNU/Linux.
+ * eval.c (verror): doprnt a copy of ap, not the original. (Bug#8545)
+
+ * eval.c (verror): OK to create a string of up to MOST_POSITIVE_FIXNUM
+ bytes.
+
+ * term.c: Don't include <stdarg.h>, as <lisp.h> does that.
+
Arithmetic overflows now return float rather than wrapping around.
(Bug#8611).
* data.c: Include <intprops.h>.
=== modified file 'src/eval.c'
--- src/eval.c 2011-04-30 19:00:39 +0000
+++ src/eval.c 2011-05-04 07:19:21 +0000
@@ -1994,7 +1994,7 @@
{
char buf[4000];
size_t size = sizeof buf;
- size_t size_max = min (MOST_POSITIVE_FIXNUM, SIZE_MAX);
+ size_t size_max = min (MOST_POSITIVE_FIXNUM + 1, SIZE_MAX);
size_t mlen = strlen (m);
char *buffer = buf;
size_t used;
@@ -2002,7 +2002,10 @@
while (1)
{
- used = doprnt (buffer, size, m, m + mlen, ap);
+ va_list ap_copy;
+ va_copy (ap_copy, ap);
+ used = doprnt (buffer, size, m, m + mlen, ap_copy);
+ va_end (ap_copy);
/* Note: the -1 below is because `doprnt' returns the number of bytes
excluding the terminating null byte, and it always terminates with a
=== modified file 'src/term.c'
--- src/term.c 2011-04-24 09:00:03 +0000
+++ src/term.c 2011-05-04 07:20:46 +0000
@@ -26,7 +26,6 @@
#include <sys/file.h>
#include <unistd.h>
#include <signal.h>
-#include <stdarg.h>
#include <setjmp.h>
#include "lisp.h"
@@ -3619,7 +3618,6 @@
vfprintf (stderr, str, ap);
if (!(strlen (str) > 0 && str[strlen (str) - 1] == '\n'))
fprintf (stderr, "\n");
- va_end (ap);
fflush (stderr);
exit (1);
}
next prev parent reply other threads:[~2011-05-04 7:28 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-25 5:46 bug#8545: issues with recent doprnt-related changes Paul Eggert
2011-04-25 9:00 ` Eli Zaretskii
2011-04-25 13:37 ` Stefan Monnier
2011-04-26 20:25 ` Paul Eggert
2011-04-27 1:14 ` Stefan Monnier
2011-04-26 6:02 ` Paul Eggert
2011-04-27 19:34 ` Eli Zaretskii
2011-04-27 23:51 ` Paul Eggert
2011-04-28 1:32 ` Juanma Barranquero
2011-04-28 3:11 ` Paul Eggert
2011-04-28 3:42 ` Juanma Barranquero
2011-04-28 5:06 ` Paul Eggert
2011-04-28 5:15 ` Eli Zaretskii
2011-04-28 5:29 ` Paul Eggert
2011-04-28 6:10 ` Eli Zaretskii
2011-04-28 6:42 ` Paul Eggert
2011-04-28 7:26 ` Eli Zaretskii
2011-04-28 7:54 ` Paul Eggert
2011-04-28 11:14 ` Eli Zaretskii
2011-04-29 12:28 ` Richard Stallman
2011-04-29 19:56 ` Eli Zaretskii
2011-04-29 23:49 ` Paul Eggert
2011-04-30 21:03 ` Richard Stallman
2011-05-01 5:41 ` Paul Eggert
2011-05-01 23:59 ` Richard Stallman
2011-05-02 0:23 ` Paul Eggert
[not found] ` <E1QH37h-0001yM-HR@fencepost.gnu.org>
2011-05-03 20:24 ` Paul Eggert
2011-05-01 4:25 ` Jason Rumney
2011-05-01 5:56 ` Paul Eggert
2011-05-01 8:12 ` Jason Rumney
2011-05-01 11:02 ` Andreas Schwab
2011-04-28 5:02 ` Eli Zaretskii
2011-04-28 5:50 ` Eli Zaretskii
[not found] ` <4DB9146D.2040702@cs.ucla.edu>
[not found] ` <E1QFQVO-0004Dq-6o@fencepost.gnu.org>
[not found] ` <4DB9E5FF.9020506@cs.ucla.edu>
2011-04-29 11:16 ` Eli Zaretskii
2011-04-29 14:41 ` Paul Eggert
2011-04-29 19:35 ` Eli Zaretskii
2011-04-29 20:32 ` Paul Eggert
2011-04-30 8:59 ` Eli Zaretskii
2011-05-04 7:28 ` Paul Eggert [this message]
2011-05-04 9:52 ` Eli Zaretskii
2011-05-04 14:56 ` Paul Eggert
[not found] ` <4DC1692B.1090101@cs.ucla.edu>
2011-05-05 20:36 ` Eli Zaretskii
[not found] ` <83ei4cnau6.fsf@gnu.org>
2011-05-06 13:33 ` Stefan Monnier
[not found] ` <jwvsjss2bz3.fsf-monnier+emacs@gnu.org>
2011-05-06 14:41 ` Paul Eggert
2011-05-06 15:03 ` Eli Zaretskii
[not found] ` <83vcxnlvl9.fsf@gnu.org>
2011-05-06 17:13 ` Stefan Monnier
[not found] ` <jwv8vuj21q0.fsf-monnier+emacs@gnu.org>
2011-05-06 19:57 ` Eli Zaretskii
[not found] ` <83k4e3lhzp.fsf@gnu.org>
2011-05-07 3:18 ` Stefan Monnier
[not found] ` <jwvr58byz9s.fsf-monnier+emacs@gnu.org>
2011-05-07 7:55 ` Eli Zaretskii
-- strict thread matches above, loose matches on Subject: below --
2011-05-01 18:19 bug#8601: * 2 -> * 4 typo fix in detect_coding_charset Paul Eggert
2011-05-01 19:06 ` Andreas Schwab
2011-05-01 19:25 ` Paul Eggert
2011-05-06 7:29 ` bug#8601: Merged fixes for 8600, 8601, 8602, and (partially) for 8545 Paul Eggert
2020-09-14 12:37 ` bug#8545: " Lars Ingebrigtsen
2020-09-14 18:41 ` Eli Zaretskii
2020-09-16 2:01 ` Paul Eggert
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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4DC10012.8020809@cs.ucla.edu \
--to=eggert@cs.ucla.edu \
--cc=8545@debbugs.gnu.org \
--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 public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).