From 304dcb656eded40707499c2194b5da3841012c7c Mon Sep 17 00:00:00 2001 From: Steven Watanabe Date: Wed, 3 Apr 2019 11:28:54 -0600 Subject: [PATCH] Handle empty matches in regex.replace. Fixes #421. --- src/engine/modules/regex.c | 8 +++++++- src/util/regex.jam | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/engine/modules/regex.c b/src/engine/modules/regex.c index d9f8177bf..281e23ad7 100644 --- a/src/engine/modules/regex.c +++ b/src/engine/modules/regex.c @@ -108,7 +108,13 @@ LIST * regex_replace( FRAME * frame, int flags ) { string_append_range( buf, pos, re->startp[ 0 ] ); string_append( buf, object_str( replacement ) ); - pos = re->endp[ 0 ]; + /* Handle empty matches */ + if ( *pos == '\0' ) + break; + else if ( pos == re->endp[ 0 ] ) + ++pos; + else + pos = re->endp[ 0 ]; } string_append( buf, pos ); diff --git a/src/util/regex.jam b/src/util/regex.jam index 766a231a6..483c6220e 100644 --- a/src/util/regex.jam +++ b/src/util/regex.jam @@ -198,6 +198,7 @@ rule __test__ ( ) assert.result " string string" : replace " string string" " " " " ; assert.result "string  string" : replace "string string" " " " " ; assert.result "-" : replace "&" "&" "-" ; + assert.result "x" : replace "" "" "x" ; assert.result "-" "a-b" : replace-list "&" "a&b" : "&" : "-" ; }