summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2007-09-04 13:20:07 +0000
committerRainer Gerhards <rgerhards@adiscon.com>2007-09-04 13:20:07 +0000
commit79a68894b4f63d1684996718f7411e4163d76bba (patch)
tree4a945db849dd3aae7215d9ef084da53d91c0dfe0
parent5b17b10f432c9b7280624b14ae2f656a34a1a829 (diff)
downloadrsyslog-79a68894b4f63d1684996718f7411e4163d76bba.tar.gz
rsyslog-79a68894b4f63d1684996718f7411e4163d76bba.tar.xz
rsyslog-79a68894b4f63d1684996718f7411e4163d76bba.zip
applied patch form varmojfekoj to fix some mem leaks and a check to make
sure that an empty string (NULL) returned by the CStr class does not cause a program abort.
-rw-r--r--msg.c8
-rw-r--r--syslogd.c14
-rw-r--r--template.c17
3 files changed, 33 insertions, 6 deletions
diff --git a/msg.c b/msg.c
index be3c48ae..80cdb09e 100644
--- a/msg.c
+++ b/msg.c
@@ -126,6 +126,14 @@ void MsgDestruct(msg_t * pM)
free(pM->pszTIMESTAMP_MySQL);
if(pM->pszPRI != NULL)
free(pM->pszPRI);
+ if(pM->pCSProgName != NULL)
+ rsCStrDestruct(pM->pCSProgName);
+ if(pM->pCSStrucData != NULL)
+ rsCStrDestruct(pM->pCSStrucData);
+ if(pM->pCSPROCID != NULL)
+ rsCStrDestruct(pM->pCSPROCID);
+ if(pM->pCSMSGID != NULL)
+ rsCStrDestruct(pM->pCSMSGID);
free(pM);
}
MsgUnlock();
diff --git a/syslogd.c b/syslogd.c
index 65af51e8..8824cc04 100644
--- a/syslogd.c
+++ b/syslogd.c
@@ -1844,6 +1844,18 @@ static rsRetVal selectorDestruct(void *pVal)
assert(pThis != NULL);
+ if(pThis->pCSHostnameComp != NULL)
+ rsCStrDestruct(pThis->pCSHostnameComp);
+ if(pThis->pCSProgNameComp != NULL)
+ rsCStrDestruct(pThis->pCSProgNameComp);
+
+ if(pThis->f_filter_type == FILTER_PROP) {
+ if(pThis->f_filterData.prop.pCSPropName != NULL)
+ rsCStrDestruct(pThis->f_filterData.prop.pCSPropName);
+ if(pThis->f_filterData.prop.pCSCompValue != NULL)
+ rsCStrDestruct(pThis->f_filterData.prop.pCSCompValue);
+ }
+
llDestroy(&pThis->llActList);
free(pThis);
@@ -4807,7 +4819,6 @@ static rsRetVal cflineProcessHostSelector(uchar **pline)
if(pDfltHostnameCmp != NULL) {
if((iRet = rsCStrSetSzStr(pDfltHostnameCmp, NULL)) != RS_RET_OK)
return(iRet);
- pDfltHostnameCmp = NULL;
}
} else {
dbgprintf("setting BSD-like hostname filter to '%s'\n", *pline);
@@ -4852,7 +4863,6 @@ static rsRetVal cflineProcessTagSelector(uchar **pline)
if(pDfltProgNameCmp != NULL) {
if((iRet = rsCStrSetSzStr(pDfltProgNameCmp, NULL)) != RS_RET_OK)
return(iRet);
- pDfltProgNameCmp = NULL;
}
} else {
dbgprintf("setting programname filter to '%s'\n", *pline);
diff --git a/template.c b/template.c
index d2f2450a..7f9c70f0 100644
--- a/template.c
+++ b/template.c
@@ -108,7 +108,11 @@ uchar *tplToString(struct template *pTpl, msg_t *pMsg)
* "real" (usable) string and discard the helper structures.
*/
rsCStrFinish(pCStr);
- return rsCStrConvSzStrAndDestruct(pCStr);
+ if((pVal = rsCStrConvSzStrAndDestruct(pCStr)) == NULL) {
+ pVal = malloc(1);
+ *pVal = '\0';
+ }
+ return pVal;
}
/* Helper to doSQLEscape. This is called if doSQLEscape
@@ -293,7 +297,7 @@ struct template* tplConstruct(void)
*/
static int do_Constant(unsigned char **pp, struct template *pTpl)
{
- register unsigned char *p;
+ register unsigned char *p, *s;
rsCStrObj *pStrB;
struct templateEntry *pTpe;
int i;
@@ -373,8 +377,13 @@ static int do_Constant(unsigned char **pp, struct template *pTpl)
* benefit from the counted string object.
* 2005-09-09 rgerhards
*/
- pTpe->data.constant.iLenConstant = rsCStrLen(pStrB);
- pTpe->data.constant.pConstant = (char*) rsCStrConvSzStrAndDestruct(pStrB);
+ if ((pTpe->data.constant.iLenConstant = rsCStrLen(pStrB)) == 0) {
+ s = malloc(1);
+ *s = '\0';
+ rsCStrDestruct(pStrB);
+ } else
+ s = rsCStrConvSzStrAndDestruct(pStrB);
+ pTpe->data.constant.pConstant = (char*) s;
*pp = p;