Commit 85cac557 authored by Richard M. Stallman's avatar Richard M. Stallman
Browse files

(Fchar_after, Fchar_before): Properly check arg type

and whether in range, for all cases.

(Fsave_excursion): Doc fix.
parent f405b38d
...@@ -380,7 +380,12 @@ DEFUN ("save-excursion", Fsave_excursion, Ssave_excursion, 0, UNEVALLED, 0, ...@@ -380,7 +380,12 @@ DEFUN ("save-excursion", Fsave_excursion, Ssave_excursion, 0, UNEVALLED, 0,
Executes BODY just like `progn'.\n\ Executes BODY just like `progn'.\n\
The values of point, mark and the current buffer are restored\n\ The values of point, mark and the current buffer are restored\n\
even in case of abnormal exit (throw or error).\n\ even in case of abnormal exit (throw or error).\n\
The state of activation of the mark is also restored.") The state of activation of the mark is also restored.\n\
\n\
This construct does not save `deactivate-mark', and therefore\n\
functions that change the buffer will still cause deactivation\n\
of the mark at the end of the command. To prevent that, bind\n\
`deactivate-mark' with `let'.")
(args) (args)
Lisp_Object args; Lisp_Object args;
{ {
...@@ -555,20 +560,22 @@ If `enable-multibyte-characters' is nil or POS is not at character boundary,\n\ ...@@ -555,20 +560,22 @@ If `enable-multibyte-characters' is nil or POS is not at character boundary,\n\
register Lisp_Object val; register Lisp_Object val;
if (NILP (pos)) if (NILP (pos))
return make_number (FETCH_CHAR (PT_BYTE)); pos_byte = PT_BYTE;
else if (MARKERP (pos))
if (MARKERP (pos)) {
pos_byte = marker_byte_position (pos); pos_byte = marker_byte_position (pos);
if (pos_byte < BEGV_BYTE || pos_byte >= ZV_BYTE)
return Qnil;
}
else else
{ {
CHECK_NUMBER_COERCE_MARKER (pos, 0); CHECK_NUMBER_COERCE_MARKER (pos, 0);
if (pos < BEGV || pos >= ZV)
return Qnil;
pos_byte = CHAR_TO_BYTE (XINT (pos)); pos_byte = CHAR_TO_BYTE (XINT (pos));
} }
if (pos_byte < BEGV_BYTE || pos_byte >= ZV_BYTE)
return Qnil;
return make_number (FETCH_CHAR (pos_byte)); return make_number (FETCH_CHAR (pos_byte));
} }
...@@ -588,13 +595,19 @@ is returned as a character.") ...@@ -588,13 +595,19 @@ is returned as a character.")
if (NILP (pos)) if (NILP (pos))
pos_byte = PT_BYTE; pos_byte = PT_BYTE;
else if (MARKERP (pos)) else if (MARKERP (pos))
pos_byte = marker_byte_position (pos); {
else if (pos <= BEGV || pos > ZV) pos_byte = marker_byte_position (pos);
return Qnil;
if (pos_byte <= BEGV_BYTE || pos_byte > ZV_BYTE)
return Qnil;
}
else else
{ {
CHECK_NUMBER_COERCE_MARKER (pos, 0); CHECK_NUMBER_COERCE_MARKER (pos, 0);
if (pos <= BEGV || pos > ZV)
return Qnil;
pos_byte = CHAR_TO_BYTE (XINT (pos)); pos_byte = CHAR_TO_BYTE (XINT (pos));
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment