diff options
author | Daniel Colascione <dancol@dancol.org> | 2016-11-08 15:26:43 -0800 |
---|---|---|
committer | Daniel Colascione <dancol@dancol.org> | 2016-11-08 15:28:49 -0800 |
commit | 3ef4ee84fa3f658c2df802569dc89023d98e9947 (patch) | |
tree | 6c8490fbfd02d796f21e43c33f83f702c1f5f461 | |
parent | 8da810f91b11a258a7ed0f5315292143072881d8 (diff) | |
download | emacs-3ef4ee84fa3f658c2df802569dc89023d98e9947.tar.gz |
Avoid infloop in python
Fix bug#24905
* lisp/progmodes/python.el (python-info-docstring-p): Improve
infloop avoidance: replace (bobp) with generic test for
forward progress.
* test/lisp/progmodes/python-tests.el (python-bob-infloop-avoid): Add
test for bug#24905
-rw-r--r-- | lisp/progmodes/python.el | 11 | ||||
-rw-r--r-- | test/automated/python-tests.el | 7 |
2 files changed, 16 insertions, 2 deletions
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 9091289b62e..d0d4a7f766e 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -4865,12 +4865,19 @@ point's current `syntax-ppss'." ;; Allow up to two consecutive docstrings only. (>= 2 - (progn + (let (last-backward-sexp-point) (while (save-excursion (python-nav-backward-sexp) (setq backward-sexp-point (point)) (and (= indentation (current-indentation)) - (not (bobp)) ; Prevent infloop. + ;; Make sure we're always moving point. + ;; If we get stuck in the same position + ;; on consecutive loop iterations, + ;; bail out. + (prog1 (not (eql last-backward-sexp-point + backward-sexp-point)) + (setq last-backward-sexp-point + backward-sexp-point)) (looking-at-p (concat "[uU]?[rR]?" (python-rx string-delimiter))))) diff --git a/test/automated/python-tests.el b/test/automated/python-tests.el index 54ed92212b8..f6564dd58cc 100644 --- a/test/automated/python-tests.el +++ b/test/automated/python-tests.el @@ -2452,6 +2452,13 @@ if x: (line-beginning-position) (line-end-position)) "abcdef"))))) +(ert-deftest python-bob-infloop-avoid () + "Test that strings at BOB don't confuse syntax analysis. Bug#24905" + (python-tests-with-temp-buffer + " \"\n" + (goto-char (point-min)) + (font-lock-fontify-buffer))) + ;;; Shell integration |