Browse code

fix null dereference when LogInfected=Full

git-svn: trunk@4991

aCaB authored on 2009/03/30 21:24:27
Showing 2 changed files
... ...
@@ -1,3 +1,7 @@
1
+Mon Mar 30 14:02:03 CEST 2009 (acab)
2
+------------------------------------
3
+ * clamav-milter/clamfi.c: fix null dereference when LogInfected=Full (bb#1522)
4
+
1 5
 Sun Mar 29 13:38:43 CEST 2009 (acab)
2 6
 ------------------------------------
3 7
  * shared/actions.c: fix logic in --move (bb#1517)
... ...
@@ -61,6 +61,7 @@ enum {
61 61
 } loginfected;
62 62
 
63 63
 #define CLAMFIBUFSZ 1424
64
+static const char *HDR_UNAVAIL = "UNKNOWN";
64 65
 
65 66
 struct CLAMFI {
66 67
     char buffer[CLAMFIBUFSZ];
... ...
@@ -91,12 +92,15 @@ enum CFWHAT {
91 91
 };
92 92
 
93 93
 
94
-static void makesanehdr(char *hdr) {
94
+static const char *makesanehdr(char *hdr) {
95
+    char *ret = hdr;
96
+    if(!hdr) return HDR_UNAVAIL;
95 97
     while(*hdr) {
96 98
 	if(*hdr=='\'' || *hdr=='\t' || *hdr=='\r' || *hdr=='\n' || !isprint(*hdr))
97 99
 	    *hdr = ' ';
98 100
 	hdr++;
99 101
     }
102
+    return ret;
100 103
 }
101 104
 
102 105
 static void nullify(SMFICTX *ctx, struct CLAMFI *cf, enum CFWHAT closewhat) {
... ...
@@ -287,18 +291,19 @@ sfsistat clamfi_eom(SMFICTX *ctx) {
287 287
 		}
288 288
 
289 289
 		if(loginfected) {
290
-		    const char *from = smfi_getsymval(ctx, "{mail_addr}"), *to = smfi_getsymval(ctx, "{rcpt_addr}");
291
-		    
292
-		    if(!from) from = "UNKNOWN";
293
-		    if(!to) to = "UNKNOWN";
294
-		    
290
+		    const char *from = smfi_getsymval(ctx, "{mail_addr}");
291
+		    const char *to = smfi_getsymval(ctx, "{rcpt_addr}");
292
+
293
+		    if(!from) from = HDR_UNAVAIL;
294
+		    if(!to) to = HDR_UNAVAIL;
295 295
 		    if(loginfected == LOGINF_FULL) {
296 296
 			const char *id = smfi_getsymval(ctx, "{i}");
297
+			const char *msg_subj = makesanehdr(cf->msg_subj);
298
+			const char *msg_date = makesanehdr(cf->msg_date);
299
+			const char *msg_id = makesanehdr(cf->msg_id);
297 300
 
298
-			makesanehdr(cf->msg_subj);
299
-			makesanehdr(cf->msg_date);
300
-			makesanehdr(cf->msg_id);
301
-			logg("~Message %s from <%s> to <%s> with subject '%s' message-id '%s' date '%s' infected by %s\n", id ? id : "UNKNOWN", from, to, cf->msg_subj, cf->msg_id, cf->msg_date, vir);
301
+			if(!id) id = HDR_UNAVAIL;
302
+			logg("~Message %s from <%s> to <%s> with subject '%s' message-id '%s' date '%s' infected by %s\n", id, from, to, msg_subj, msg_id, msg_date, vir);
302 303
 		    } else logg("~Message from <%s> to <%s> infected by %s\n", from, to, vir);
303 304
 		}
304 305
 	    }