X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/294127e7d59a5d23a32561716a1b192db410e12f..435cf35bcc28ab4220764dff7874f477310d9a48:/src/search.c diff --git a/src/search.c b/src/search.c index e9617985c1..e39ba3dbf0 100644 --- a/src/search.c +++ b/src/search.c @@ -22,13 +22,11 @@ along with GNU Emacs. If not, see . */ #include #include "lisp.h" -#include "category.h" #include "character.h" #include "buffer.h" #include "syntax.h" #include "charset.h" #include "region-cache.h" -#include "commands.h" #include "blockinput.h" #include "intervals.h" @@ -706,6 +704,12 @@ find_newline (ptrdiff_t start, ptrdiff_t start_byte, ptrdiff_t end, start, &next_change); if (result) { + /* When the cache revalidation is deferred, + next-change might point beyond ZV, which will + cause assertion violation in CHAR_TO_BYTE below. + Limit next_change to ZV to avoid that. */ + if (next_change > ZV) + next_change = ZV; start = next_change; lim1 = next_change = end; } @@ -2748,7 +2752,9 @@ SUBEXP, a number, specifies which parenthesized expression in the last regexp. Value is nil if SUBEXPth pair didn't match, or there were less than SUBEXP pairs. -Zero means the entire text matched by the whole regexp or whole string. */) +Zero means the entire text matched by the whole regexp or whole string. + +Return value is undefined if the last search failed. */) (Lisp_Object subexp) { return match_limit (subexp, 1); @@ -2760,21 +2766,23 @@ SUBEXP, a number, specifies which parenthesized expression in the last regexp. Value is nil if SUBEXPth pair didn't match, or there were less than SUBEXP pairs. -Zero means the entire text matched by the whole regexp or whole string. */) +Zero means the entire text matched by the whole regexp or whole string. + +Return value is undefined if the last search failed. */) (Lisp_Object subexp) { return match_limit (subexp, 0); } DEFUN ("match-data", Fmatch_data, Smatch_data, 0, 3, 0, - doc: /* Return a list containing all info on what the last search matched. + doc: /* Return a list describing what the last search matched. Element 2N is `(match-beginning N)'; element 2N + 1 is `(match-end N)'. All the elements are markers or nil (nil if the Nth pair didn't match) if the last match was on a buffer; integers or nil if a string was matched. Use `set-match-data' to reinstate the data in this list. If INTEGERS (the optional first argument) is non-nil, always use -integers \(rather than markers) to represent buffer positions. In +integers (rather than markers) to represent buffer positions. In this case, and if the last match was in a buffer, the buffer will get stored as one additional element at the end of the list.