More inithosts() fixes:
o Don't free(3) memory occupied by host structures already in the host list. o Set hrp->hostinfo to NULL if a host record has to stay in the host list, but is to be ignored. Selecthost() knows that. o Reduce the pollution with excessive NULL checks. o Close a couple of memory leaks. MFC after: 1 week
This commit is contained in:
parent
9c1b8868dc
commit
f2fe752d6b
@ -783,12 +783,12 @@ inithosts(void)
|
||||
if ((hrp = malloc(sizeof(struct ftphost))) == NULL)
|
||||
goto nextline;
|
||||
hrp->hostname = NULL;
|
||||
hrp->hostinfo = NULL;
|
||||
insert = 1;
|
||||
} else
|
||||
} else {
|
||||
if (hrp->hostinfo)
|
||||
freeaddrinfo(hrp->hostinfo);
|
||||
insert = 0; /* host already in the chain */
|
||||
if (hrp->hostinfo)
|
||||
freeaddrinfo(hrp->hostinfo);
|
||||
}
|
||||
hrp->hostinfo = res;
|
||||
|
||||
/*
|
||||
@ -808,9 +808,11 @@ inithosts(void)
|
||||
break;
|
||||
default:
|
||||
/* should not reach here */
|
||||
if (hrp->hostinfo != NULL)
|
||||
freeaddrinfo(hrp->hostinfo);
|
||||
free(hrp);
|
||||
freeaddrinfo(hrp->hostinfo);
|
||||
if (insert)
|
||||
free(hrp); /*not in chain, can free*/
|
||||
else
|
||||
hrp->hostinfo = NULL; /*mark as blank*/
|
||||
goto nextline;
|
||||
/* NOTREACHED */
|
||||
}
|
||||
@ -836,8 +838,13 @@ inithosts(void)
|
||||
hrp->hostname = NULL;
|
||||
}
|
||||
if (hrp->hostname == NULL &&
|
||||
(hrp->hostname = strdup(vhost)) == NULL)
|
||||
(hrp->hostname = strdup(vhost)) == NULL) {
|
||||
freeaddrinfo(hrp->hostinfo);
|
||||
hrp->hostinfo = NULL; /* mark as blank */
|
||||
if (hp)
|
||||
freehostent(hp);
|
||||
goto nextline;
|
||||
}
|
||||
hrp->anonuser = anonuser;
|
||||
hrp->statfile = statfile;
|
||||
hrp->welcome = welcome;
|
||||
|
Loading…
Reference in New Issue
Block a user