]> git.eshelyaron.com Git - emacs.git/commitdiff
CC Mode: Fix infinite loop in c-brace-stack-at.
authorAlan Mackenzie <acm@muc.de>
Mon, 7 Nov 2022 12:20:07 +0000 (12:20 +0000)
committerAlan Mackenzie <acm@muc.de>
Mon, 7 Nov 2022 12:20:07 +0000 (12:20 +0000)
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.

lisp/progmodes/cc-engine.el

index d730fddeb08c01f1ec06f6d68918f7d1436b2b60..8cf882d569987ddfa53bd3c37a179c35bc5dc243 100644 (file)
@@ -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)))))