summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/lisp-mode.el
diff options
context:
space:
mode:
authorNoam Postavsky <npostavs@gmail.com>2018-03-17 21:14:11 -0400
committerNoam Postavsky <npostavs@gmail.com>2018-10-25 17:55:49 -0400
commit92de44fa1fdeda74a9b8254f968829df4c957da0 (patch)
tree2c6c352dbc0384b58f9ad927ad195a023b9492d4 /lisp/emacs-lisp/lisp-mode.el
parentc3adbc88a00f2c8fa773d46bfcf4571c9ebde8fb (diff)
downloademacs-92de44fa1fdeda74a9b8254f968829df4c957da0.tar.gz
emacs-92de44fa1fdeda74a9b8254f968829df4c957da0.tar.bz2
emacs-92de44fa1fdeda74a9b8254f968829df4c957da0.zip
Don't error when indenting malformed Lisp (Bug#30891)
* lisp/emacs-lisp/lisp-mode.el (lisp-indent-calc-next): If we run out of indent stack, reset the parse state.
Diffstat (limited to 'lisp/emacs-lisp/lisp-mode.el')
-rw-r--r--lisp/emacs-lisp/lisp-mode.el4
1 files changed, 4 insertions, 0 deletions
diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el
index 205c810b978..13ad06e4aee 100644
--- a/lisp/emacs-lisp/lisp-mode.el
+++ b/lisp/emacs-lisp/lisp-mode.el
@@ -827,6 +827,10 @@ by more than one line to cross a string literal."
(prog1
(let (indent)
(cond ((= (forward-line 1) 1) nil)
+ ;; Negative depth, probably some kind of syntax error.
+ ((null indent-stack)
+ ;; Reset state.
+ (setq ppss (parse-partial-sexp (point) (point))))
((car indent-stack))
((integerp (setq indent (calculate-lisp-indent ppss)))
(setf (car indent-stack) indent))