aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFederico Tedin2020-05-03 15:47:56 +0200
committerEli Zaretskii2020-05-09 10:27:06 +0300
commit1f149cb392ac4ed99dd1ce2da01178ff0490e746 (patch)
tree3042d129d1242f949a843850de5887b19c666ae6
parent0d861f25b288d23368cc7522eb56654724fd758d (diff)
downloademacs-1f149cb392ac4ed99dd1ce2da01178ff0490e746.tar.gz
emacs-1f149cb392ac4ed99dd1ce2da01178ff0490e746.zip
Prevent hanging in next-single-char-property-change
* src/textprop.c (Fnext_single_char_property_change): Clarify in the doc string the behavior when LIMIT is past the end of OBJECT. Stop the search when position gets to end of buffer, for when LIMIT is beyond that. (Bug#40000)
-rw-r--r--src/textprop.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/textprop.c b/src/textprop.c
index 960dba3f8dc..0876badc873 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -766,14 +766,13 @@ the current buffer), POSITION is a buffer position (integer or marker).
766If OBJECT is a string, POSITION is a 0-based index into it. 766If OBJECT is a string, POSITION is a 0-based index into it.
767 767
768In a string, scan runs to the end of the string, unless LIMIT is non-nil. 768In a string, scan runs to the end of the string, unless LIMIT is non-nil.
769In a buffer, if LIMIT is nil or omitted, it runs to (point-max), and the 769In a buffer, scan runs to end of buffer, unless LIMIT is non-nil.
770value cannot exceed that.
771If the optional fourth argument LIMIT is non-nil, don't search 770If the optional fourth argument LIMIT is non-nil, don't search
772past position LIMIT; return LIMIT if nothing is found before LIMIT. 771past position LIMIT; return LIMIT if nothing is found before LIMIT.
772However, if OBJECT is a buffer and LIMIT is beyond the end of the
773buffer, this function returns `point-max', not LIMIT.
773 774
774The property values are compared with `eq'. 775The property values are compared with `eq'. */)
775If the property is constant all the way to the end of OBJECT, return the
776last valid position in OBJECT. */)
777 (Lisp_Object position, Lisp_Object prop, Lisp_Object object, Lisp_Object limit) 776 (Lisp_Object position, Lisp_Object prop, Lisp_Object object, Lisp_Object limit)
778{ 777{
779 if (STRINGP (object)) 778 if (STRINGP (object))
@@ -832,6 +831,9 @@ last valid position in OBJECT. */)
832 value = Fget_char_property (position, prop, object); 831 value = Fget_char_property (position, prop, object);
833 if (!EQ (value, initial_value)) 832 if (!EQ (value, initial_value))
834 break; 833 break;
834
835 if (XFIXNAT (position) >= ZV)
836 break;
835 } 837 }
836 838
837 position = unbind_to (count, position); 839 position = unbind_to (count, position);