Commits

Aidan Kehoe committed 8a2ac78

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.

  • Participants
  • Parent commits a81a739

Comments (0)

Files changed (4)

File src/ChangeLog

+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):
 
 #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);
   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);

File tests/ChangeLog

+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.

File tests/automated/regexp-tests.el

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