ref: 5ba6c22fafed27542b105dc293371d2b1a1c8a1d
parent: 53004d7576b54fe18002db7fa106a5434e2698a5
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Mon Jan 19 13:06:17 EST 2026
libregexp: fix handling of empty regprog // Instead of making empty regprog equal to ^ make the empty regprog match every position in the string with a zero-length match. This fixes using // as separator in awk's gsub operation.
--- a/sys/man/6/regexp
+++ b/sys/man/6/regexp
@@ -91,8 +91,6 @@
matches the beginning of a line;
.L $
matches the end of the line.
-An empty regular expression behaves equivalently to
-.LR ^ .
.PP
The
.B REP
--- a/sys/src/libregexp/regcomp.c
+++ b/sys/src/libregexp/regcomp.c
@@ -163,13 +163,9 @@
Renode *parsetr;
int regstrlen, maxthr;
- regstrlen = utflen(regstr);
- if(regstrlen == 0){- regstr = "^";
- regstrlen = 1;
- }
initplex(&plex, regstr, lit);
- plex.nodes = calloc(sizeof(*plex.nodes), regstrlen*2);
+ regstrlen = utflen(regstr);
+ plex.nodes = calloc(sizeof(*plex.nodes), regstrlen*2+1);
if(plex.nodes == nil)
return nil;
plex.next = plex.nodes;
@@ -180,7 +176,7 @@
}
maxthr = regstrlen + 1;
- parsetr = node(&plex, TSUB, e0(&plex), nil);
+ parsetr = node(&plex, TSUB, regstrlen?e0(&plex):nil, nil);
// prtree(parsetr, 0, 1);
reprog = malloc(sizeof(Reprog) +
--
⑨