bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#61514: 30.0.50; sadistically long xml line hangs emacs


From: Gregory Heytings
Subject: bug#61514: 30.0.50; sadistically long xml line hangs emacs
Date: Sat, 18 Feb 2023 23:06:10 +0000


Interestingly, the following simple patch fixes both the original and the truncated cases:

diff --git a/src/regex-emacs.c b/src/regex-emacs.c
index 2dca0d16ad9..eb943df46f0 100644
--- a/src/regex-emacs.c
+++ b/src/regex-emacs.c
@@ -877,7 +877,7 @@ #define INIT_FAILURE_ALLOC 20
    whose default stack limit is 2mb.  In order for a larger
    value to work reliably, you have to try to make it accord
    with the process stack limit.  */
-ptrdiff_t emacs_re_max_failures = 40000;
+ptrdiff_t emacs_re_max_failures = 37499;

 union fail_stack_elt
 {

I obtained the magical 37499 value by bisecting. Both cases fail with 37500 (or higher), and work as expected (i.e. they fail with "Stack overflow in regexp matcher") with 37499. I don't know why exactly, but I note that:

37499 * 8 = 299992 and 37500 * 8 = 300000 (where 8 is sizeof (fail_stack_elt_t))

37499 * 20 * 8 = 5999840 and 37500 * 20 * 8 = 6000000 (where 20 is 
TYPICAL_FAILURE_SIZE)

so it seems that there is a kind of limit at exactly 6000000 bytes?






reply via email to

[Prev in Thread] Current Thread [Next in Thread]