aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/progmodes
diff options
context:
space:
mode:
authorDaniel Colascione2016-11-08 15:26:43 -0800
committerDaniel Colascione2016-11-08 15:28:49 -0800
commit3ef4ee84fa3f658c2df802569dc89023d98e9947 (patch)
tree6c8490fbfd02d796f21e43c33f83f702c1f5f461 /lisp/progmodes
parent8da810f91b11a258a7ed0f5315292143072881d8 (diff)
downloademacs-3ef4ee84fa3f658c2df802569dc89023d98e9947.tar.gz
emacs-3ef4ee84fa3f658c2df802569dc89023d98e9947.zip
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
Diffstat (limited to 'lisp/progmodes')
-rw-r--r--lisp/progmodes/python.el11
1 files changed, 9 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'."
4865 ;; Allow up to two consecutive docstrings only. 4865 ;; Allow up to two consecutive docstrings only.
4866 (>= 4866 (>=
4867 2 4867 2
4868 (progn 4868 (let (last-backward-sexp-point)
4869 (while (save-excursion 4869 (while (save-excursion
4870 (python-nav-backward-sexp) 4870 (python-nav-backward-sexp)
4871 (setq backward-sexp-point (point)) 4871 (setq backward-sexp-point (point))
4872 (and (= indentation (current-indentation)) 4872 (and (= indentation (current-indentation))
4873 (not (bobp)) ; Prevent infloop. 4873 ;; Make sure we're always moving point.
4874 ;; If we get stuck in the same position
4875 ;; on consecutive loop iterations,
4876 ;; bail out.
4877 (prog1 (not (eql last-backward-sexp-point
4878 backward-sexp-point))
4879 (setq last-backward-sexp-point
4880 backward-sexp-point))
4874 (looking-at-p 4881 (looking-at-p
4875 (concat "[uU]?[rR]?" 4882 (concat "[uU]?[rR]?"
4876 (python-rx string-delimiter))))) 4883 (python-rx string-delimiter)))))