From: Philipp Stephani Date: Sat, 5 Oct 2019 11:00:08 +0000 (+0200) Subject: * src/fns.c (Flocale_info): Avoid fixnum overflow under ASan. X-Git-Tag: emacs-27.0.90~1270 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=66839a74bb74efa16f9f531e93d58cadf6ab7196;p=emacs.git * src/fns.c (Flocale_info): Avoid fixnum overflow under ASan. --- diff --git a/src/fns.c b/src/fns.c index fa52e5e1978..37c581f15b8 100644 --- a/src/fns.c +++ b/src/fns.c @@ -3176,8 +3176,14 @@ The data read from the system are decoded using `locale-coding-system'. */) # endif # ifdef HAVE_LANGINFO__NL_PAPER_WIDTH if (EQ (item, Qpaper)) - return list2i ((intptr_t) nl_langinfo (_NL_PAPER_WIDTH), - (intptr_t) nl_langinfo (_NL_PAPER_HEIGHT)); + /* We have to cast twice here: first to a correctly-sized integer, + then to int, because that's what nl_langinfo is documented to + return for _NO_PAPER_{WIDTH,HEIGHT}. The first cast doesn't + suffice because it could overflow an Emacs fixnum. This can + happen when running under ASan, which fills allocated but + uninitialized memory with 0xBE bytes. */ + return list2i ((int) (intptr_t) nl_langinfo (_NL_PAPER_WIDTH), + (int) (intptr_t) nl_langinfo (_NL_PAPER_HEIGHT)); # endif #endif /* HAVE_LANGINFO_CODESET*/ return Qnil;