expr: don't evaluate matched substr as a number - sbase - suckless unix tools | |
git clone git://git.suckless.org/sbase | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 270ca025ce236885e3177cd7acfd2cfbdf6e36a5 | |
parent e50d533d598dbe284e225e2ee52ed5f76a6e6f6a | |
Author: Randy Palamar <[email protected]> | |
Date: Sun, 7 Jan 2024 11:02:18 -0700 | |
expr: don't evaluate matched substr as a number | |
POSIX specifies that if the pattern contains a subexpression then | |
the first matched subexpression should be returned if it exists. | |
This fixes things like the following: | |
./expr 00003 : '\(.*\)' | |
Before: 3 | |
After: 00003 | |
Diffstat: | |
M expr.c | 13 ++----------- | |
1 file changed, 2 insertions(+), 11 deletions(-) | |
--- | |
diff --git a/expr.c b/expr.c | |
@@ -59,11 +59,9 @@ match(struct val *vstr, struct val *vregx, struct val *ret) | |
{ | |
regex_t re; | |
regmatch_t matches[2]; | |
- long long d; | |
size_t anchlen; | |
char *s, *p, *anchreg; | |
char *str = vstr->str, *regx = vregx->str; | |
- const char *errstr; | |
/* anchored regex */ | |
anchlen = strlen(regx) + 1 + 1; | |
@@ -83,15 +81,8 @@ match(struct val *vstr, struct val *vregx, struct val *ret) | |
s = str + matches[1].rm_so; | |
p = str + matches[1].rm_eo; | |
*p = '\0'; | |
- | |
- d = strtonum(s, LLONG_MIN, LLONG_MAX, &errstr); | |
- if (!errstr) { | |
- ret->num = d; | |
- return; | |
- } else { | |
- ret->str = enstrdup(3, s); | |
- return; | |
- } | |
+ ret->str = enstrdup(3, s); | |
+ return; | |
} else { | |
regfree(&re); | |
str += matches[0].rm_so; |