X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/7c8b0b3644ada886dfde4032fdf38687a5968089..3698c4e475fb59730626af5d001599785ef5ef9e:/src/search.c diff --git a/src/search.c b/src/search.c index e9617985c1..7cb18a2059 100644 --- a/src/search.c +++ b/src/search.c @@ -1,14 +1,14 @@ /* String search routines for GNU Emacs. -Copyright (C) 1985-1987, 1993-1994, 1997-1999, 2001-2015 Free Software +Copyright (C) 1985-1987, 1993-1994, 1997-1999, 2001-2016 Free Software Foundation, Inc. This file is part of GNU Emacs. GNU Emacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. +the Free Software Foundation, either version 3 of the License, or (at +your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -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; } @@ -2687,7 +2691,8 @@ since only regular expressions have distinguished subexpressions. */) if (case_action == all_caps) Fupcase_region (make_number (search_regs.start[sub]), - make_number (newpoint)); + make_number (newpoint), + Qnil); else if (case_action == cap_initial) Fupcase_initials_region (make_number (search_regs.start[sub]), make_number (newpoint)); @@ -2748,7 +2753,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 +2767,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.