From 66839a74bb74efa16f9f531e93d58cadf6ab7196 Mon Sep 17 00:00:00 2001 From: Philipp Stephani Date: Sat, 5 Oct 2019 13:00:08 +0200 Subject: [PATCH] * src/fns.c (Flocale_info): Avoid fixnum overflow under ASan. --- src/fns.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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; -- 2.39.5