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"))
+