From 9c2a87a46978f4c586a4e12291f4a200b6d2d2b4 Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Sat, 12 Aug 2023 13:55:51 +0200 Subject: [PATCH] Remove buggy if clause, add safeguards against buggy input --- src/frontend/inp.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/frontend/inp.c b/src/frontend/inp.c index 0cbbf0425..74e457b33 100644 --- a/src/frontend/inp.c +++ b/src/frontend/inp.c @@ -2411,7 +2411,6 @@ limit(double nominal_val, double abs_variation) * of agauss() * agauss in .param lines has been treated already */ - static void eval_agauss(struct card *deck, char *fcn) { @@ -2448,14 +2447,30 @@ eval_agauss(struct card *deck, char *fcn) begstr = copy_substring(curr_line, ap); lparen = strchr(ap, '('); tmp1str = midstr = gettok_char(&lparen, ')', FALSE, TRUE); - if (lparen + 1) - contstr = copy(lparen + 1); + if (!tmp1str) { + fprintf(cp_err, "ERROR: Incomplete function %s in line %s\n", fcn, curr_line); + tfree(begstr); + return; + } + contstr = copy(lparen + 1); tmp1str++; /* skip '(' */ /* find the parameters, ignore ( ) , */ delstr = tmp2str = gettok_np(&tmp1str); + if (!tmp2str) { + fprintf(cp_err, "ERROR: Incomplete function %s in line %s\n", fcn, curr_line); + tfree(begstr); + tfree(contstr); + return; + } x = INPevaluate(&tmp2str, &nerror, 1); tfree(delstr); delstr = tmp2str = gettok_np(&tmp1str); + if (!tmp2str) { + fprintf(cp_err, "ERROR: Incomplete function %s in line %s\n", fcn, curr_line); + tfree(begstr); + tfree(contstr); + return; + } y = INPevaluate(&tmp2str, &nerror, 1); tfree(delstr); if (cieq(fcn, "agauss")) {