From: Alan Mackenzie Date: Mon, 7 Nov 2022 12:20:07 +0000 (+0000) Subject: CC Mode: Fix infinite loop in c-brace-stack-at. X-Git-Tag: emacs-29.0.90~1616^2~249 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=c19ca5eb7f27344ca03fa300a65ec9b33dc7253e;p=emacs.git CC Mode: Fix infinite loop in c-brace-stack-at. This fixes bug #59038. The infinite loop occurred with a buffer containing Base-64 encoded text rather than appropriate C Mode text. * lisp/progmodes/cc-engine.el (c-update-brace-stack): Don't execute c-beginning-of-current-token unless the previous c-syntactic-re-search-forward has succeeded at least once. --- diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index d730fddeb08..8cf882d5699 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -6158,9 +6158,10 @@ comment at the start of cc-engine.el for more info." (setq s (cdr s)))) ((c-keyword-member kwd-sym 'c-flat-decl-block-kwds) (push 0 s)))) - ;; The failing `c-syntactic-re-search-forward' may have left us in the - ;; middle of a token, which might be a significant token. Fix this! - (c-beginning-of-current-token) + (when (> prev-match-pos 1) ; Has the search matched at least once? + ;; The failing `c-syntactic-re-search-forward' may have left us in the + ;; middle of a token, which might be a significant token. Fix this! + (c-beginning-of-current-token)) (cons (point) (cons bound-<> s)))))