summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2015-11-16 13:09:46 -0800
committerPaul Eggert <eggert@cs.ucla.edu>2015-11-16 13:10:17 -0800
commit8ff888a07d0500f1274723086469191aade0a33e (patch)
treea21880c49d5eb2ad67084e1d74d81913b30ebf13
parent1f07a61ee36d01e85da146f0f32798b8933ea563 (diff)
Improve fix for regex reentrancy abort
Suggested by Stefan Monnier (Bug#21688). * src/syntax.c (update_syntax_table_forward): Remove recently-added PROPERTIZE arg, and assume it is true. All callers changed. * src/syntax.h (UPDATE_SYNTAX_TABLE_FORWARD_FAST): Invoke update_syntax_table directly.
-rw-r--r--src/syntax.c13
-rw-r--r--src/syntax.h7
2 files changed, 8 insertions, 12 deletions
diff --git a/src/syntax.c b/src/syntax.c
index 687bef74a8..f939a76a2e 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -246,7 +246,7 @@ SETUP_SYNTAX_TABLE (ptrdiff_t from, ptrdiff_t count)
if (parse_sexp_lookup_properties)
{
if (count > 0)
- update_syntax_table_forward (from, true, true, Qnil);
+ update_syntax_table_forward (from, true, Qnil);
else if (from > BEGV)
{
update_syntax_table (from - 1, count, true, Qnil);
@@ -502,12 +502,12 @@ parse_sexp_propertize (ptrdiff_t charpos)
e_property_truncated, so the e_property_truncated flag may
occasionally be left raised spuriously. This should be rare. */
gl_state.e_property_truncated = false;
- update_syntax_table_forward (charpos, false, true, Qnil);
+ update_syntax_table_forward (charpos, false, Qnil);
}
}
void
-update_syntax_table_forward (ptrdiff_t charpos, bool init, bool propertize,
+update_syntax_table_forward (ptrdiff_t charpos, bool init,
Lisp_Object object)
{
if (gl_state.e_property_truncated)
@@ -518,12 +518,9 @@ update_syntax_table_forward (ptrdiff_t charpos, bool init, bool propertize,
else
{
update_syntax_table (charpos, 1, init, object);
- propertize &= (NILP (object)
- && gl_state.e_property > syntax_propertize__done);
+ if (NILP (object) && gl_state.e_property > syntax_propertize__done)
+ parse_sexp_propertize (charpos);
}
-
- if (propertize)
- parse_sexp_propertize (charpos);
}
/* Returns true if char at CHARPOS is quoted.
diff --git a/src/syntax.h b/src/syntax.h
index 01c92ae8da..eb154e088c 100644
--- a/src/syntax.h
+++ b/src/syntax.h
@@ -27,7 +27,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
INLINE_HEADER_BEGIN
extern void update_syntax_table (ptrdiff_t, EMACS_INT, bool, Lisp_Object);
-extern void update_syntax_table_forward (ptrdiff_t, bool, bool, Lisp_Object);
+extern void update_syntax_table_forward (ptrdiff_t, bool, Lisp_Object);
/* The standard syntax table is stored where it will automatically
be used in all new buffers. */
@@ -183,15 +183,14 @@ UPDATE_SYNTAX_TABLE_FORWARD (ptrdiff_t charpos)
{ /* Performs just-in-time syntax-propertization. */
if (parse_sexp_lookup_properties && charpos >= gl_state.e_property)
update_syntax_table_forward (charpos + gl_state.offset,
- false, true, gl_state.object);
+ false, gl_state.object);
}
INLINE void
UPDATE_SYNTAX_TABLE_FORWARD_FAST (ptrdiff_t charpos)
{
if (parse_sexp_lookup_properties && charpos >= gl_state.e_property)
- update_syntax_table_forward (charpos + gl_state.offset,
- false, false, gl_state.object);
+ update_syntax_table (charpos + gl_state.offset, 1, false, gl_state.object);
}
/* Make syntax table state (gl_state) good for CHARPOS, assuming it is