diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2011-02-25 14:23:25 +0100 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2011-02-25 14:23:25 +0100 |
commit | dbf181c3d34570a450430a6616f1d1a5ce0a242c (patch) | |
tree | 49ce0e902f30d1b530edf4f703da595b0289681e /runtime/batch.h | |
parent | dfa88369d4ca4290db56b843f9eabdae1bfe0fd5 (diff) | |
download | rsyslog-dbf181c3d34570a450430a6616f1d1a5ce0a242c.tar.gz rsyslog-dbf181c3d34570a450430a6616f1d1a5ce0a242c.tar.bz2 rsyslog-dbf181c3d34570a450430a6616f1d1a5ce0a242c.zip |
bugfix: fixed a memory leak and potential abort condition
this could happen if multiple rulesets were used and some output batches
contained messages belonging to more than one ruleset.
fixes: http://bugzilla.adiscon.com/show_bug.cgi?id=226
fixes: http://bugzilla.adiscon.com/show_bug.cgi?id=218
Diffstat (limited to 'runtime/batch.h')
-rw-r--r-- | runtime/batch.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/runtime/batch.h b/runtime/batch.h index d0504f2b..944889bd 100644 --- a/runtime/batch.h +++ b/runtime/batch.h @@ -136,11 +136,16 @@ batchIsValidElem(batch_t *pBatch, int i) { /* copy one batch element to another. * This creates a complete duplicate in those cases where * it is needed. Use duplication only when absolutely necessary! + * Note that all working fields are reset to zeros. If that were + * not done, we would have potential problems with invalid + * or double pointer frees. * rgerhards, 2010-06-10 */ static inline void batchCopyElem(batch_obj_t *pDest, batch_obj_t *pSrc) { - memcpy(pDest, pSrc, sizeof(batch_obj_t)); + memset(pDest, 0, sizeof(batch_obj_t)); + pDest->pUsrp = pSrc->pUsrp; + pDest->state = pSrc->state; } @@ -171,6 +176,7 @@ batchFree(batch_t *pBatch) { static inline rsRetVal batchInit(batch_t *pBatch, int maxElem) { DEFiRet; + pBatch->iDoneUpTo = 0; pBatch->maxElem = maxElem; CHKmalloc(pBatch->pElem = calloc((size_t)maxElem, sizeof(batch_obj_t))); // TODO: replace calloc by inidividual writes? |