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.
This commit is contained in:
13
src/marker.c
13
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;
|
||||
|
||||
Reference in New Issue
Block a user