# HG changeset patch # User Chong Yidong # Date 1232840562 0 # Node ID 577a3b5b05f5b4ba21fba2b58d97d60af53f703d # Parent d6d07d783be3c60811e91cb40d843851991b5091 (align-region): Avoid infloop. diff -r d6d07d783be3 -r 577a3b5b05f5 lisp/align.el --- 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