changeset 101449:577a3b5b05f5

(align-region): Avoid infloop.
author Chong Yidong <cyd@stupidchicken.com>
date Sat, 24 Jan 2009 23:42:42 +0000
parents d6d07d783be3
children 2bdde6d84336
files lisp/align.el
diffstat 1 files changed, 9 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/align.el	Sat Jan 24 23:42:14 2009 +0000
+++ b/lisp/align.el	Sat Jan 24 23:42:42 2009 +0000
@@ -1307,6 +1307,7 @@
 		 (rulesep (assq 'separate rule))
 		 (thissep (if rulesep (cdr rulesep) separate))
 		 same (eol 0)
+		 search-start
 		 group group-c
 		 spacing spacing-c
 		 tab-stop tab-stop-c
@@ -1412,6 +1413,7 @@
 		      ;; while we can find the rule in the alignment
 		      ;; region..
 		      (while (and (< (point) end-mark)
+				  (setq search-start (point))
 				  (if regfunc
 				      (funcall regfunc end-mark nil)
 				    (re-search-forward regexp
@@ -1436,7 +1438,7 @@
 			;; if the search ended us on the beginning of
 			;; the next line, move back to the end of the
 			;; previous line.
-			(if (bolp)
+			(if (and (bolp) (> (point) search-start))
 			    (forward-char -1))
 
 			;; lookup the `group' attribute the first time
@@ -1576,7 +1578,12 @@
 			    ;; the next line; don't bother searching
 			    ;; anymore on this one
 			    (if (and (not repeat) (not (bolp)))
-				(forward-line)))))
+				(forward-line))
+
+			    ;; if the search did not change point,
+			    ;; move forward to avoid an infinite loop
+			    (if (= (point) search-start)
+				(forward-char)))))
 
 		      ;; when they are no more matches for this rule,
 		      ;; align whatever was left over