]> git.eshelyaron.com Git - emacs.git/commitdiff
* src/fns.c (Flocale_info): Avoid fixnum overflow under ASan.
authorPhilipp Stephani <phst@google.com>
Sat, 5 Oct 2019 11:00:08 +0000 (13:00 +0200)
committerPhilipp Stephani <phst@google.com>
Sat, 5 Oct 2019 11:00:08 +0000 (13:00 +0200)
src/fns.c

index fa52e5e1978e5503d6f0578757bd7b207e15a974..37c581f15b8a4cdf04b1c890ff182a758f943908 100644 (file)
--- 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;