]> git.eshelyaron.com Git - emacs.git/commit
Raise limit of regexp repetition (Bug#24914)
authorNoam Postavsky <npostavs@gmail.com>
Mon, 11 Dec 2017 23:53:34 +0000 (18:53 -0500)
committerNoam Postavsky <npostavs@gmail.com>
Sat, 27 Jan 2018 01:49:44 +0000 (20:49 -0500)
commit559f1606166822394df3988c18c0ad02984ac675
tree68a6e881e690e48bf3d3cd64ef3c5430d511b295
parentf5357b1ca4ae90e7ad6d8321884319cfdf828508
Raise limit of regexp repetition (Bug#24914)

* src/regex.h (RE_DUP_MAX): Raise limit to 2^16-1.
* etc/NEWS: Announce it.
* doc/lispref/searching.texi (Regexp Backslash): Document it.
* test/src/regex-tests.el (regex-repeat-limit): Test it.

* src/regex.h (reg_errcode_t): Add REG_ESIZEBR code.
* src/regex.c (re_error_msgid): Add corresponding entry.
(GET_INTERVAL_COUNT): Return it instead of the more generic REG_EBADBR
when encountering a repetition greater than RE_DUP_MAX.

* lisp/isearch.el (isearch-search): Don't convert errors starting with
"Invalid" into "incomplete".  Such errors are not incomplete, in the
sense that they cannot be corrected by appending more characters to
the end of the regexp.  The affected error messages are:

- REG_BADPAT "Invalid regular expression"
  - \\(?X:\\) where X is not a legal group number
  - \\_X where X is not < or >

- REG_ECOLLATE "Invalid collation character"
  - There is no code to throw this.

- REG_ECTYPE "Invalid character class name"
  - [[:foo:] where foo is not a valid class name

- REG_ESUBREG "Invalid back reference"
  - \N where N is referenced before matching group N

- REG_BADBR "Invalid content of \\{\\}"
  - \\{N,M\\} where N < 0, M < N, M or N larger than max
  - \\{NX where X is not a digit or backslash
  - \\{N\\X where X is not a }

- REG_ERANGE "Invalid range end"
  - There is no code to throw this.

- REG_BADRPT "Invalid preceding regular expression"
  - We never throw this.  It would usually indicate a "*" with no
    preceding regexp text, but Emacs allows that to match a literal
    "*".
doc/lispref/searching.texi
etc/NEWS
lisp/isearch.el
src/regex.c
src/regex.h
test/src/regex-tests.el