]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix set-marker when the position is larger than the largest buffer
authorEli Zaretskii <eliz@gnu.org>
Fri, 6 Dec 2019 13:29:20 +0000 (15:29 +0200)
committerEli Zaretskii <eliz@gnu.org>
Fri, 6 Dec 2019 13:29:20 +0000 (15:29 +0200)
* 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.

src/marker.c

index 0b2e1bf5c6b8f78b5db09e84d7e0420f5d374067..6358bc3bf794ba9ddb604a75bc5bb8f0e488aa5a 100644 (file)
@@ -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;