From: Eli Zaretskii Date: Fri, 6 Dec 2019 13:29:20 +0000 (+0200) Subject: Fix set-marker when the position is larger than the largest buffer X-Git-Tag: emacs-27.0.90~425 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=1171fa32ca0bc7682b9fdc93babebc4c4feed104;p=emacs.git Fix set-marker when the position is larger than the largest buffer * src/marker.c (set_marker_internal): Handle the case where POSITION is beyond PTRDIFF_MAX, which can happen if Emacs was built --with-wide-int. Bug uncovered by the recently added overlay tests. --- diff --git a/src/marker.c b/src/marker.c index 0b2e1bf5c6b..6358bc3bf79 100644 --- a/src/marker.c +++ b/src/marker.c @@ -529,7 +529,18 @@ set_marker_internal (Lisp_Object marker, Lisp_Object position, don't want to call buf_charpos_to_bytepos if POSITION is a marker and so we know the bytepos already. */ if (FIXNUMP (position)) - charpos = XFIXNUM (position), bytepos = -1; + { +#if EMACS_INT_MAX > PTRDIFF_MAX + /* A --with-wide-int build. */ + EMACS_INT cpos = XFIXNUM (position); + if (cpos > PTRDIFF_MAX) + cpos = PTRDIFF_MAX; + charpos = cpos; + bytepos = -1; +#else + charpos = XFIXNUM (position), bytepos = -1; +#endif + } else if (MARKERP (position)) { charpos = XMARKER (position)->charpos;