emacs-diffs
[Top][All Lists]
Advanced

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

master 013655811a: CC Mode: Prevent infinite recursion in c-determine-li


From: Alan Mackenzie
Subject: master 013655811a: CC Mode: Prevent infinite recursion in c-determine-limit.
Date: Sun, 5 Feb 2023 13:02:37 -0500 (EST)

branch: master
commit 013655811aa1c89754372610c8c6ccccec166035
Author: Alan Mackenzie <acm@muc.de>
Commit: Alan Mackenzie <acm@muc.de>

    CC Mode: Prevent infinite recursion in c-determine-limit.
    
    This was happening particularly with long-lines, possibly because the 
position
    was inside a literal when calling c-determine-limit.
    
    * lisp/progmodes/cc-engine.el (c-determine-limit): Guard a recursive call by
    checking (- base try-size).
---
 lisp/progmodes/cc-engine.el | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index 86bc35baa7..1899b522ab 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -5915,19 +5915,21 @@ comment at the start of cc-engine.el for more info."
        (cond
         ((> pos start)                 ; Nothing but literals
          base)
-        ((> base (point-min))
+        ((and
+          (> base (point-min))
+          (> (- base try-size) (point-min))) ; prevent infinite recursion.
          (c-determine-limit how-far-back base (* 2 try-size) org-start))
         (t base)))
        ((>= count how-far-back)
        (c-determine-limit-no-macro
-       (+ (car elt) (- count how-far-back))
-       org-start))
+        (+ (car elt) (- count how-far-back))
+        org-start))
        ((eq base (point-min))
        (point-min))
        ((> base (- start try-size)) ; Can only happen if we hit point-min.
        (c-determine-limit-no-macro
-       (car elt)
-       org-start))
+        (car elt)
+        org-start))
        (t
        (c-determine-limit (- how-far-back count) base (* 2 try-size)
                           org-start))))))



reply via email to

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