]> git.eshelyaron.com Git - emacs.git/commitdiff
CC Mode: Fix infinite loop in noise macro near end of buffer
authorAlan Mackenzie <acm@muc.de>
Sat, 18 Jun 2022 11:23:06 +0000 (11:23 +0000)
committerAlan Mackenzie <acm@muc.de>
Sat, 18 Jun 2022 11:23:06 +0000 (11:23 +0000)
This fixes bug #55771.  Also fix an inaccuracy in c-defun-name-1 with the same
cause.

* lisp/progmodes/cc-cmds.el (c-defun-name-1)
* lisp/progmodes/cc-engine.el (c-forward-noise-clause): Check the return
value of c-forward-token-2 and act upon it when not zero.

lisp/progmodes/cc-cmds.el
lisp/progmodes/cc-engine.el

index e9cc63709e62a3c9d62a6cca8616c024dbebe921..82268f4943389846c56c806312f0b856e2589666 100644 (file)
@@ -2115,13 +2115,12 @@ with a brace block."
          (c-forward-syntactic-ws)
          (when (eq (char-after) ?\")
            (forward-sexp 1)
+           (c-forward-syntactic-ws)
            (c-forward-token-2))        ; over the comma and following WS.
-         (buffer-substring-no-properties
-          (point)
-          (progn
-            (c-forward-token-2)
-            (c-backward-syntactic-ws)
-            (point))))
+         (setq pos (point))
+         (and (zerop (c-forward-token-2))
+              (progn (c-backward-syntactic-ws) t)
+              (buffer-substring-no-properties pos (point))))
 
         ((and (c-major-mode-is 'objc-mode) (looking-at "[-+]\\s-*("))     ; Objective-C method
          ;; Move to the beginning of the method name.
index 8794a527f88fb4b6bf2a0e73828c637ffebc3ac3..f9c33f51495d143a73ecb5f7579ae77c8da19106 100644 (file)
@@ -1239,7 +1239,7 @@ comment at the start of cc-engine.el for more info."
                           (not comma-delimited)
                           (not (c-looking-at-inexpr-block lim nil t))
                           (save-excursion
-                            (c-backward-token-2 1 t nil)
+                            (c-backward-token-2 1 t nil) ; Don't test the value
                             (not (looking-at "=\\([^=]\\|$\\)")))
                           (or
                            (not c-opt-block-decls-with-vars-key)
@@ -8289,9 +8289,10 @@ multi-line strings (but not C++, for example)."
 (defun c-forward-noise-clause ()
   ;; Point is at a c-noise-macro-with-parens-names macro identifier.  Go
   ;; forward over this name, any parenthesis expression which follows it, and
-  ;; any syntactic WS, ending up at the next token.  If there is an unbalanced
-  ;; paren expression, leave point at it.  Always Return t.
-  (c-forward-token-2)
+  ;; any syntactic WS, ending up at the next token or EOB.  If there is an
+  ;; unbalanced paren expression, leave point at it.  Always Return t.
+  (or (zerop (c-forward-token-2))
+      (goto-char (point-max)))
   (if (and (eq (char-after) ?\()
           (c-go-list-forward))
       (c-forward-syntactic-ws))