... | ... |
@@ -228,7 +228,7 @@ sfsistat clamfi_header(SMFICTX *ctx, char *headerf, char *headerv) { |
228 | 228 |
if(!cf->totsz && cf->all_whitelisted) { |
229 | 229 |
logg("*Skipping scan (all destinations whitelisted)\n"); |
230 | 230 |
nullify(ctx, cf, CF_NONE); |
231 |
- free(cf); |
|
231 |
+ free(cf); |
|
232 | 232 |
return SMFIS_ACCEPT; |
233 | 233 |
} |
234 | 234 |
|
... | ... |
@@ -260,32 +260,43 @@ sfsistat clamfi_header(SMFICTX *ctx, char *headerf, char *headerv) { |
260 | 260 |
free(cf); |
261 | 261 |
return ret; |
262 | 262 |
} |
263 |
- return sendchunk(cf, (unsigned char *)"\r\n", 2, ctx); |
|
263 |
+ ret = sendchunk(cf, (unsigned char *)"\r\n", 2, ctx); |
|
264 |
+ if(ret != SMFIS_CONTINUE) |
|
265 |
+ free(cf); |
|
266 |
+ return ret; |
|
264 | 267 |
} |
265 | 268 |
|
266 | 269 |
|
267 | 270 |
sfsistat clamfi_body(SMFICTX *ctx, unsigned char *bodyp, size_t len) { |
268 | 271 |
struct CLAMFI *cf; |
272 |
+ sfsistat ret; |
|
269 | 273 |
|
270 | 274 |
if(!(cf = (struct CLAMFI *)smfi_getpriv(ctx))) |
271 | 275 |
return SMFIS_CONTINUE; /* whatever */ |
272 | 276 |
|
273 | 277 |
if(!cf->gotbody) { |
274 |
- sfsistat ret = sendchunk(cf, (unsigned char *)"\r\n", 2, ctx); |
|
275 |
- if(ret != SMFIS_CONTINUE) |
|
278 |
+ ret = sendchunk(cf, (unsigned char *)"\r\n", 2, ctx); |
|
279 |
+ if(ret != SMFIS_CONTINUE) { |
|
280 |
+ free(cf); |
|
276 | 281 |
return ret; |
282 |
+ } |
|
277 | 283 |
cf->gotbody = 1; |
278 | 284 |
} |
279 | 285 |
|
280 |
- return sendchunk(cf, bodyp, len, ctx); |
|
286 |
+ ret = sendchunk(cf, bodyp, len, ctx); |
|
287 |
+ if(ret != SMFIS_CONTINUE) |
|
288 |
+ free(cf); |
|
289 |
+ return ret; |
|
281 | 290 |
} |
282 | 291 |
|
283 | 292 |
|
284 | 293 |
sfsistat clamfi_abort(SMFICTX *ctx) { |
285 | 294 |
struct CLAMFI *cf; |
286 | 295 |
|
287 |
- if((cf = (struct CLAMFI *)smfi_getpriv(ctx))) |
|
296 |
+ if((cf = (struct CLAMFI *)smfi_getpriv(ctx))) { |
|
288 | 297 |
nullify(ctx, cf, CF_ANY); |
298 |
+ free(cf); |
|
299 |
+ } |
|
289 | 300 |
return SMFIS_CONTINUE; |
290 | 301 |
} |
291 | 302 |
|
... | ... |
@@ -303,6 +314,7 @@ sfsistat clamfi_eom(SMFICTX *ctx) { |
303 | 303 |
logg("*Not scanning an empty message\n"); |
304 | 304 |
ret = CleanAction(ctx); |
305 | 305 |
nullify(ctx, cf, CF_NONE); |
306 |
+ free(cf); |
|
306 | 307 |
return ret; |
307 | 308 |
} |
308 | 309 |
|
... | ... |
@@ -312,6 +324,7 @@ sfsistat clamfi_eom(SMFICTX *ctx) { |
312 | 312 |
if(nc_sendmsg(cf->main, cf->alt) == -1) { |
313 | 313 |
logg("!FD send failed\n"); |
314 | 314 |
nullify(ctx, cf, CF_ALT); |
315 |
+ free(cf); |
|
315 | 316 |
return FailAction; |
316 | 317 |
} |
317 | 318 |
} else { |
... | ... |
@@ -320,6 +333,7 @@ sfsistat clamfi_eom(SMFICTX *ctx) { |
320 | 320 |
if((cf->bufsz && nc_send(cf->main, &cf->sendme, cf->bufsz + 4)) || nc_send(cf->main, &sendmetoo, 4)) { |
321 | 321 |
logg("!Failed to flush STREAM\n"); |
322 | 322 |
nullify(ctx, cf, CF_NONE); |
323 |
+ free(cf); |
|
323 | 324 |
return FailAction; |
324 | 325 |
} |
325 | 326 |
} |
... | ... |
@@ -334,6 +348,7 @@ sfsistat clamfi_eom(SMFICTX *ctx) { |
334 | 334 |
if(!reply) { |
335 | 335 |
logg("!No reply from clamd\n"); |
336 | 336 |
nullify(ctx, cf, CF_NONE); |
337 |
+ free(cf); |
|
337 | 338 |
return FailAction; |
338 | 339 |
} |
339 | 340 |
|
... | ... |
@@ -468,7 +483,7 @@ sfsistat clamfi_eom(SMFICTX *ctx) { |
468 | 468 |
} |
469 | 469 |
|
470 | 470 |
nullify(ctx, cf, CF_MAIN); |
471 |
- |
|
471 |
+ free(cf); |
|
472 | 472 |
free(reply); |
473 | 473 |
return ret; |
474 | 474 |
} |
... | ... |
@@ -729,6 +744,7 @@ sfsistat clamfi_envrcpt(SMFICTX *ctx, char **argv) { |
729 | 729 |
if(!new_rcpt) { |
730 | 730 |
logg("!Failed to allocate array for new recipient\n"); |
731 | 731 |
nullify(ctx, cf, CF_ANY); |
732 |
+ free(cf); |
|
732 | 733 |
return FailAction; |
733 | 734 |
} |
734 | 735 |
cf->recipients = new_rcpt; |
... | ... |
@@ -736,6 +752,7 @@ sfsistat clamfi_envrcpt(SMFICTX *ctx, char **argv) { |
736 | 736 |
if(!(cf->recipients[rcpt_cnt] = strdup(argv[0]))) { |
737 | 737 |
logg("!Failed to allocate space for new recipient\n"); |
738 | 738 |
nullify(ctx, cf, CF_ANY); |
739 |
+ free(cf); |
|
739 | 740 |
return FailAction; |
740 | 741 |
} |
741 | 742 |
} |