Commit c8e75cdc authored by Rusty Russell's avatar Rusty Russell

tal/str: fix error when strreg regex looks for literal slashes.

Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
parent 58c5a352
......@@ -236,9 +236,31 @@ fail:
goto out;
}
static size_t count_open_braces(const char *string)
{
#if 1
size_t num = 0, esc = 0;
while (*string) {
if (*string == '\\')
esc++;
else {
/* An odd number of \ means it's escaped. */
if (*string == '(' && (esc & 1) == 0)
num++;
esc = 0;
}
string++;
}
return num;
#else
return strcount(string, "(");
#endif
}
bool tal_strreg(const tal_t *ctx, const char *string, const char *regex, ...)
{
size_t nmatch = 1 + strcount(regex, "(");
size_t nmatch = 1 + count_open_braces(regex);
regmatch_t matches[nmatch];
regex_t r;
bool ret = false;
......
......@@ -21,7 +21,7 @@ int main(int argc, char *argv[])
/* If it accesses this, it will crash. */
char **invalid = (char **)1L;
plan_tests(40);
plan_tests(41);
/* Simple matching. */
ok1(tal_strreg(ctx, "hello world!", "hello") == true);
ok1(tal_strreg(ctx, "hello world!", "hi") == false);
......@@ -116,5 +116,9 @@ int main(int argc, char *argv[])
ok1(no_children(ctx));
tal_free(ctx);
/* Don't get fooled by \(! */
ok1(tal_strreg(ctx, "(hello) (world)!", "\\([a-z]*\\) \\([a-z]+\\)",
invalid) == true);
return exit_status();
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment