Mercurial > hg > xemacs-beta
changeset 5680:8a2ac78cb97d
Pre-emptively update any dirty mirror syntax table before searching
src/ChangeLog addition:
2012-09-02 Aidan Kehoe <kehoea@parhasard.net>
* regex.c (re_search_2):
* regex.c (re_match_2):
If the mirror syntax table is dirty, update it before the search,
preventing a malloc() inside the search code, something which
isn't allowed. Thank you Henry Thompson!
tests/ChangeLog addition:
2012-09-02 Aidan Kehoe <kehoea@parhasard.net>
* automated/regexp-tests.el:
Make sure we can search for character ranges successfully when the
syntax table is dirty.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Sun, 02 Sep 2012 17:36:47 +0100 |
parents | a81a739181dc |
children | 4af5a3435c94 |
files | src/ChangeLog src/regex.c tests/ChangeLog tests/automated/regexp-tests.el |
diffstat | 4 files changed, 27 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Sun Sep 02 14:31:40 2012 +0100 +++ b/src/ChangeLog Sun Sep 02 17:36:47 2012 +0100 @@ -1,3 +1,11 @@ +2012-09-02 Aidan Kehoe <kehoea@parhasard.net> + + * regex.c (re_search_2): + * regex.c (re_match_2): + If the mirror syntax table is dirty, update it before the search, + preventing a malloc() inside the search code, something which + isn't allowed. Thank you Henry Thompson! + 2012-08-12 Aidan Kehoe <kehoea@parhasard.net> * specifier.c (define_specifier_tag):
--- a/src/regex.c Sun Sep 02 14:31:40 2012 +0100 +++ b/src/regex.c Sun Sep 02 17:36:47 2012 +0100 @@ -4663,6 +4663,7 @@ #ifdef emacs BEGIN_REGEX_MALLOC_OK (); + update_mirror_syntax_if_dirty (BUFFER_MIRROR_SYNTAX_TABLE (lispbuf)); scache = setup_syntax_cache (scache, lispobj, lispbuf, offset_to_charxpos (lispobj, startpos), 1); @@ -5052,6 +5053,10 @@ int result; #ifdef emacs + /* Update the mirror syntax table if it's dirty now, this would otherwise + cause a malloc() in charset_mule in re_match_2_internal() when checking + characters' syntax. */ + update_mirror_syntax_if_dirty (BUFFER_MIRROR_SYNTAX_TABLE (lispbuf)); scache = setup_syntax_cache (scache, lispobj, lispbuf, offset_to_charxpos (lispobj, pos), 1);
--- a/tests/ChangeLog Sun Sep 02 14:31:40 2012 +0100 +++ b/tests/ChangeLog Sun Sep 02 17:36:47 2012 +0100 @@ -1,3 +1,9 @@ +2012-09-02 Aidan Kehoe <kehoea@parhasard.net> + + * automated/regexp-tests.el: + Make sure we can search for character ranges successfully when the + syntax table is dirty. + 2012-08-02 Stephen J. Turnbull <stephen@xemacs.org> * XEmacs 21.5.32 "habanero" is released.
--- a/tests/automated/regexp-tests.el Sun Sep 02 14:31:40 2012 +0100 +++ b/tests/automated/regexp-tests.el Sun Sep 02 17:36:47 2012 +0100 @@ -1109,3 +1109,11 @@ (decode-char 'ucs #x2116) ;; NUMERO SIGN (decode-char 'ucs #x5357))) ;; kDefinition south; southern part; southward +(with-temp-buffer + (insert "hi there") + (goto-char 1) + (set-syntax-table (copy-syntax-table)) + (modify-syntax-entry 'ascii "<") + (Assert (null (re-search-forward "[[:alnum:]]" nil t)) + "checking that a bug with dirty syntax table caches has been fixed")) +