diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2013-06-24 18:25:02 +0200 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2013-06-24 18:25:02 +0200 |
commit | 1de0e68c927e25fd0ca4f859a33d4943c6b8948f (patch) | |
tree | 91840b5ba93ea2c63f1e59d5fd95774f561b641e /grammar/rainerscript.c | |
parent | d9b2ccbf3886fb3a1ad7eaba59f5486bee6aaa33 (diff) | |
download | rsyslog-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.c | 11 |
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(¶mvals[i].val); |