emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 1171fa3: Fix set-marker when the position is larger than the larg


From: Eli Zaretskii
Subject: master 1171fa3: Fix set-marker when the position is larger than the largest buffer
Date: Fri, 6 Dec 2019 08:30:57 -0500 (EST)

branch: master
commit 1171fa32ca0bc7682b9fdc93babebc4c4feed104
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>

    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.
---
 src/marker.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/marker.c b/src/marker.c
index 0b2e1bf..6358bc3 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;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]