summaryrefslogtreecommitdiffstats
path: root/grammar/rainerscript.c
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2013-06-24 18:25:02 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2013-06-24 18:25:02 +0200
commit1de0e68c927e25fd0ca4f859a33d4943c6b8948f (patch)
tree91840b5ba93ea2c63f1e59d5fd95774f561b641e /grammar/rainerscript.c
parentd9b2ccbf3886fb3a1ad7eaba59f5486bee6aaa33 (diff)
downloadrsyslog-1de0e68c927e25fd0ca4f859a33d4943c6b8948f.tar.gz
rsyslog-1de0e68c927e25fd0ca4f859a33d4943c6b8948f.tar.bz2
rsyslog-1de0e68c927e25fd0ca4f859a33d4943c6b8948f.zip
bugfix: RainerScript object required parameters were not properly checked
this clould result to segfaults on startup if parameters were missing.
Diffstat (limited to 'grammar/rainerscript.c')
-rw-r--r--grammar/rainerscript.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/grammar/rainerscript.c b/grammar/rainerscript.c
index 89cf946c..95972fbe 100644
--- a/grammar/rainerscript.c
+++ b/grammar/rainerscript.c
@@ -938,8 +938,14 @@ nvlstGetParams(struct nvlst *lst, struct cnfparamblk *params,
for(i = 0 ; i < params->nParams ; ++i) {
param = params->descr + i;
- if((valnode = nvlstFindNameCStr(lst, param->name)) == NULL)
+ if((valnode = nvlstFindNameCStr(lst, param->name)) == NULL) {
+ if(param->flags & CNFPARAM_REQUIRED) {
+ parser_errmsg("parameter '%s' required but not specified - "
+ "fix config", param->name);
+ bInError = 1;
+ }
continue;
+ }
if(vals[i].bUsed) {
parser_errmsg("parameter '%s' specified more than once - "
"one instance is ignored. Fix config", param->name);
@@ -950,7 +956,6 @@ nvlstGetParams(struct nvlst *lst, struct cnfparamblk *params,
}
}
-
if(bInError) {
if(bValsWasNULL)
cnfparamvalsDestruct(vals, params);
@@ -3444,6 +3449,8 @@ void
cnfparamvalsDestruct(struct cnfparamvals *paramvals, struct cnfparamblk *blk)
{
int i;
+ if(paramvals == NULL)
+ return;
for(i = 0 ; i < blk->nParams ; ++i) {
if(paramvals[i].bUsed) {
varDelete(&paramvals[i].val);