diff --git a/LICENSE b/LICENSE index 828c521..c03f27e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,11 +1,6 @@ MIT License -<<<<<<< HEAD -Works are copyright (c) 2018 their respective AUTHORS, -unless such work is in the Public Domain (again, see AUTHORS) -======= Copyright (c) 2017 Open Water Analytics ->>>>>>> master Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/src/rules.c b/src/rules.c index d0addb8..7ee4d8a 100644 --- a/src/rules.c +++ b/src/rules.c @@ -110,6 +110,10 @@ void initrules(Project *pr) //-------------------------------------------------------------- { pr->rules.RuleState = r_PRIORITY; + pr->rules.LastPremise = NULL; + pr->rules.LastThenAction = NULL; + pr->rules.LastElseAction = NULL; + pr->rules.ActionList = NULL; pr->network.Rule = NULL; } @@ -169,8 +173,14 @@ void freerules(Project *pr) //-------------------------------------------------------------- { int i; + + // Already freed + if (pr->network.Rule == NULL) + return; + for (i = 1; i <= pr->network.Nrules; i++) clearrule(pr, i); free(pr->network.Rule); + pr->network.Rule = NULL; } int ruledata(Project *pr) @@ -199,6 +209,12 @@ int ruledata(Project *pr) break; case r_RULE: + // Missing the rule label + if (parser->Ntokens != 2) + { + err = 201; + break; + } net->Nrules++; newrule(pr); rules->RuleState = r_RULE; @@ -302,24 +318,24 @@ void ruleerrmsg(Project *pr) // Get label of rule being parsed if (net->Nrules > 0) { - strcpy(label, t_RULE); - strcat(label, " "); - strcat(label, net->Rule[net->Nrules].label); + strncpy(label, t_RULE, MAXMSG); + strncat(label, " ", MAXMSG); + strncat(label, net->Rule[net->Nrules].label, MAXMSG); } - else strcpy(label, t_RULES_SECT); + else strncpy(label, t_RULES_SECT, MAXMSG); // Write rule label and error message to status report - sprintf(pr->Msg, "%s", msg); - strcat(pr->Msg, label); - strcat(pr->Msg, ":"); + snprintf(pr->Msg, MAXMSG, "%s", msg); + strncat(pr->Msg, label, MAXMSG); + strncat(pr->Msg, ":", MAXMSG); writeline(pr, pr->Msg); // Write text of rule clause being parsed to status report strcpy(msg, Tok[0]); for (i = 1; i < parser->Ntokens; i++) { - strcat(msg, " "); - strcat(msg, Tok[i]); + strncat(msg, " ", MAXLINE); + strncat(msg, Tok[i], MAXLINE); } writeline(pr, msg); }