# 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;