Hi Folks,

The mg command 'regexp-replace "^.*$" ""' enters an endless loop (until
memory exhausted).  This behaviour also occurs in query-replace-regexp
with the "!" option.

This is due to a change I suggested to re_forwsrch, that is, not moving
dot when the line is empty (re_search.c 1.35). The reason for this
change was to ensure the replacement took effect on the starting line of
a replace-regexp, even if the line was empty.

Here's a patch to fix the issue, which is much simpler than my
previous suggestion. It merely reverses the change in re_search:

--- re_search.c.orig    Mon Mar 11 16:05:29 2024
+++ re_search.c Tue Mar 26 14:20:37 2024
@@ -342,10 +342,9 @@
    if (tbo == clp->l_used)
        /*
         * Don't start matching past end of line -- must move to
-        * beginning of next line, unless line is empty or at
-        * end of file.
+        * beginning of next line, unless at end of file.
         */
-       if (clp != curbp->b_headp && llength(clp) != 0) {
+       if (clp != curbp->b_headp) {
            clp = lforw(clp);
            tdotline++;
            tbo = 0;

As noted, this leave a small defect, but I think that's a better
outcome than an endless loop.

Best Regards,
Mark
--
Mark Willson | Email: mark.will...@hydrus.org.uk


Reply via email to