From 42653f7c3d761e32ab05378158ce09ab36b266ed Mon Sep 17 00:00:00 2001 From: rlar Date: Thu, 5 Apr 2012 21:24:25 +0200 Subject: [PATCH] inpptree.c, fix premature memory allocation --- src/spicelib/parser/inpptree.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/spicelib/parser/inpptree.c b/src/spicelib/parser/inpptree.c index d5d572951..0bbcf5622 100644 --- a/src/spicelib/parser/inpptree.c +++ b/src/spicelib/parser/inpptree.c @@ -547,7 +547,7 @@ static INPparseNode *mkcon(double value) static INPparseNode *mkb(int type, INPparseNode * left, INPparseNode * right) { - INPparseNode *p = TMALLOC(INPparseNode, 1); + INPparseNode *p; int i; if ((right->type == PT_CONSTANT) && (left->type == PT_CONSTANT)) { @@ -621,6 +621,8 @@ static INPparseNode *mkb(int type, INPparseNode * left, break; } + p = TMALLOC(INPparseNode, 1); + p->type = type; p->left = left; p->right = right; @@ -647,9 +649,8 @@ static INPparseNode *mkb(int type, INPparseNode * left, static INPparseNode *mkf(int type, INPparseNode * arg) { - INPparseNode *p = TMALLOC(INPparseNode, 1); + INPparseNode *p; int i; - double constval; for (i = 0; i < NUM_FUNCS; i++) if (funcs[i].number == type) @@ -660,10 +661,12 @@ static INPparseNode *mkf(int type, INPparseNode * arg) } if (arg->type == PT_CONSTANT) { - constval = PTunary(funcs[i].funcptr) (arg->constant); + double constval = PTunary(funcs[i].funcptr) (arg->constant); return (mkcon(constval)); } + p = TMALLOC(INPparseNode, 1); + p->type = PT_FUNCTION; p->left = arg; @@ -726,6 +729,7 @@ static INPparseNode *mkbnode(const char *opstr, INPparseNode * arg1, fprintf(stderr, "Internal Error: no such op num %s\n", opstr); return (NULL); } + p = TMALLOC(INPparseNode, 1); p->type = ops[i].number; @@ -833,8 +837,6 @@ static INPparseNode *mkfnode(const char *fname, INPparseNode * arg) (void) strcpy(buf, fname); strtolower(buf); - p = TMALLOC(INPparseNode, 1); - if(!strcmp("ternary_fcn", buf)) { // extern void printTree(INPparseNode *); @@ -851,6 +853,8 @@ static INPparseNode *mkfnode(const char *fname, INPparseNode * arg) INPparseNode *arg2 = arg->left->right; INPparseNode *arg3 = arg->right; + p = TMALLOC(INPparseNode, 1); + p->type = PT_TERN; p->left = arg1; p->right = mkb(PT_COMMA, arg2, arg3); @@ -867,6 +871,8 @@ static INPparseNode *mkfnode(const char *fname, INPparseNode * arg) return (NULL); } + p = TMALLOC(INPparseNode, 1); + p->type = PT_FUNCTION; p->left = arg; p->funcname = funcs[i].name;