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:
Yaroslav Tykhiy 2002-08-27 09:02:52 +00:00
parent 9c1b8868dc
commit f2fe752d6b

View File

@ -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;