Introduction
Introduction Statistics Contact Development Disclaimer Help
expr: tonum: handle case where result was previously calculated - sbase - suckl…
git clone git://git.suckless.org/sbase
Log
Files
Refs
README
LICENSE
---
commit d335c366f7a2ef74ab8da19b721707110ec821c8
parent 6b9da17eb42e671946bf9326476a20f1b9497bdc
Author: Randy Palamar <[email protected]>
Date: Mon, 22 Jan 2024 14:18:10 -0700
expr: tonum: handle case where result was previously calculated
As pointed out in a mail to dev expr was segfaulting when multiple
math operations were specified on the command line: eg. 'expr 3 \*
2 + 1'. This happens because the tonum(), introduced in e50d533,
assumed that v->str was always non null. parse() guarantees this
for user input but this is not the case when doop() is called with
the result of a previous calculation. However in that case we know
that v->num is already valid so we can simply return.
Diffstat:
M expr.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
---
diff --git a/expr.c b/expr.c
@@ -21,7 +21,13 @@ static void
tonum(struct val *v)
{
const char *errstr;
- long long d = strtonum(v->str, LLONG_MIN, LLONG_MAX, &errstr);
+ long long d;
+
+ /* check if val is the result of an earlier calculation */
+ if (!v->str)
+ return;
+
+ d = strtonum(v->str, LLONG_MIN, LLONG_MAX, &errstr);
if (errstr)
enprintf(2, "error: expected integer, got %s\n", v->str);
v->num = d;
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.