diff --git a/ChangeLog b/ChangeLog index c1e5d6077..6460ec9d5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Fri Sep 10 10:52:45 CEST 2010 (acab) +------------------------------------ + * clamav-milter/netcode.c: fix error path fd leak when connection succeeds + but ping fails (bb#2259) + Thu Sep 9 12:30:34 EEST 2010 (edwin) ------------------------------------- * libclamav/bytecode.c: properly skip bytecodes with long lines. diff --git a/clamav-milter/netcode.c b/clamav-milter/netcode.c index bcdd16de5..6fea94548 100644 --- a/clamav-milter/netcode.c +++ b/clamav-milter/netcode.c @@ -293,12 +293,16 @@ void nc_ping_entry(struct CP_ENTRY *cpe) { int s = nc_connect_entry(cpe); char *reply; - if(s>=0 && !nc_send(s, "nPING\n", 6) && (reply = nc_recv(s))) { - cpe->dead = strcmp(reply, "PONG\n")!=0; - free(reply); + if(s>=0) { + if(!nc_send(s, "nPING\n", 6) && (reply = nc_recv(s))) { + cpe->dead = strcmp(reply, "PONG\n")!=0; + free(reply); + close(s); + return; + } close(s); - } else cpe->dead = 1; - return; + } + cpe->dead = 1; }