diff options
author | Chong Yidong <cyd@stupidchicken.com> | 2011-01-26 19:51:41 -0500 |
---|---|---|
committer | Chong Yidong <cyd@stupidchicken.com> | 2011-01-26 19:51:41 -0500 |
commit | af7c5700cad96fd6f11d1d79c59ed65793813f50 (patch) | |
tree | 17001488466eb70e4b3b7e497fc5932aec8aff2f /lisp/progmodes | |
parent | 37d1c45d60c946768ff107bc68141e063dbe80be (diff) | |
download | emacs-af7c5700cad96fd6f11d1d79c59ed65793813f50.tar.gz |
Limit recursion depth of c-forward-<>-arglist-recur (Bug#7722).
* progmodes/cc-engine.el (c-forward-<>-arglist-recur): Set a limit
to the recursion depth.
Diffstat (limited to 'lisp/progmodes')
-rw-r--r-- | lisp/progmodes/cc-engine.el | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index 5fd418d1def..f96cd1b5c93 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -4393,6 +4393,8 @@ comment at the start of cc-engine.el for more info." (goto-char safe-pos) t))) +(defvar c-forward-<>-arglist-recur-depth) + (defun c-forward-<>-arglist (all-types) ;; The point is assumed to be at a "<". Try to treat it as the open ;; paren of an angle bracket arglist and move forward to the @@ -4418,7 +4420,8 @@ comment at the start of cc-engine.el for more info." ;; If `c-record-type-identifiers' is set then activate ;; recording of any found types that constitute an argument in ;; the arglist. - (c-record-found-types (if c-record-type-identifiers t))) + (c-record-found-types (if c-record-type-identifiers t)) + (c-forward-<>-arglist-recur--depth 0)) (if (catch 'angle-bracket-arglist-escape (setq c-record-found-types (c-forward-<>-arglist-recur all-types))) @@ -4434,6 +4437,14 @@ comment at the start of cc-engine.el for more info." nil))) (defun c-forward-<>-arglist-recur (all-types) + + ;; Temporary workaround for Bug#7722. + (when (boundp 'c-forward-<>-arglist-recur--depth) + (if (> c-forward-<>-arglist-recur--depth 200) + (error "Max recursion depth reached in <> arglist") + (setq c-forward-<>-arglist-recur--depth + (1+ c-forward-<>-arglist-recur--depth)))) + ;; Recursive part of `c-forward-<>-arglist'. ;; ;; This function might do hidden buffer changes. |