Re: [hackers] [sbase][PATCH 2/2] expr: don't evaluate matched substr as a number

2024-01-16 Thread Roberto E. Vargas Caballero
Hi,

On Sun, Jan 07, 2024 at 11:02:18AM -0700, Randy Palamar wrote:
> 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 3 : '\(.*\)'
> Before: 3
> After: 3

Applied, thanks!

Roberto Vargas



[hackers] [sbase][PATCH 2/2] expr: don't evaluate matched substr as a number

2024-01-07 Thread Randy Palamar
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 3 : '\(.*\)'
Before: 3
After: 3
---
 expr.c | 13 ++---
 1 file changed, 2 insertions(+), 11 deletions(-)

diff --git a/expr.c b/expr.c
index ae32b9f..3afb94b 100644
--- 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, );
-   if (!errstr) {
-   ret->num = d;
-   return;
-   } else {
-   ret->str = enstrdup(3, s);
-   return;
-   }
+   ret->str = enstrdup(3, s);
+   return;
} else {
regfree();
str += matches[0].rm_so;
-- 
2.41.0