Subject: bug#3424 closed by Teemu Likonen <[email-masked]> (Re: align-regexp: Infinite loop with default regexp)

From: [email-masked] (Emacs bug Tracking System)
Date: Sun, 14 Jun 2009 05:55:06 +0000

This is an automatic notification regarding your bug report
which was filed against the emacs package:

#3424: align-regexp: Infinite loop with default regexp

It has been closed by Teemu Likonen <[email-masked]>.

Their explanation is attached below along with your original report.
If this explanation is unsatisfactory and you have not received a
better one in a separate message then please contact Teemu Likonen <[email-masked]> by
replying to this email.

-- 
3424: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3424
Emacs Bug Tracking System
Contact [email-masked] with problems

Subject: Re: align-regexp: Infinite loop with default regexp
From: Teemu Likonen <[email-masked]>
To: [email-masked]
Date: Sun, 14 Jun 2009 08:52:52 +0300

On 2009-05-30 20:37 (+0300), Teemu Likonen wrote:

> The align-regexp command enters infinite loop when it is used with the
> default regexp and with REPEAT argument. It's seems to be because the
> regexp \s-* matches also zero-length strings.

I have misunderstood the behaviour of the regexp. The default space
group \s-* is about the spaces to modify before some other matching
regexp. It's a bit unexpected to me but I originally reported about
infinite loop which is indeed fixed in Emacs 23. So let's close this
bug.

Subject: align-regexp: Infinite loop with default regexp
From: Teemu Likonen <[email-masked]>
To: [email-masked]
Date: Sat, 30 May 2009 20:37:44 +0300

The align-regexp command enters infinite loop when it is used with the
default regexp and with REPEAT argument. It's seems to be because the
regexp \s-* matches also zero-length strings.

Steps to reproduce:

 1. Put the following line to the *scratch* buffer:

        foo bar

 2. Put the line inside a region

 3. Type command:

        C-u M-x align-regexp RET \(\s-*\) RET 1 RET 1 RET y

 4. Loop infinitely.

I suggest changing the default regexp to \(\s-+\), like the attached
patch illustrates.

diff --git i/lisp/align.el w/lisp/align.el
index 0917e7d..ea36302 100644
--- i/lisp/align.el
+++ w/lisp/align.el
@@ -933,7 +933,7 @@ region, call `align-regexp' and type in that regular expression."
     (list (region-beginning) (region-end))
     (if current-prefix-arg
 	(list (read-string "Complex align using regexp: "
-			   "\\(\\s-*\\)")
+			   "\\(\\s-+\\)")
 	      (string-to-number
 	       (read-string
 		"Parenthesis group to modify (justify if negative): " "1"))
@@ -941,7 +941,7 @@ region, call `align-regexp' and type in that regular expression."
 	       (read-string "Amount of spacing (or column if negative): "
 			    (number-to-string align-default-spacing)))
 	      (y-or-n-p "Repeat throughout line? "))
-      (list (concat "\\(\\s-*\\)"
+      (list (concat "\\(\\s-+\\)"
 		    (read-string "Align regexp: "))
 	    1 align-default-spacing nil))))
   (let ((rule