Avoid potential memory leak in krb5_sendto_set_hostname
If the hostname was already set, a typo in a test meant we were not freeing it. While we're at it, handle the unlikely possibility that the existing pointer is passed as the new value.
This commit is contained in:

committed by
Nico Williams

parent
d73ec2510a
commit
766e6cda8a
@@ -228,13 +228,19 @@ krb5_sendto_set_hostname(krb5_context context,
|
|||||||
krb5_sendto_ctx ctx,
|
krb5_sendto_ctx ctx,
|
||||||
const char *hostname)
|
const char *hostname)
|
||||||
{
|
{
|
||||||
if (ctx->hostname == NULL)
|
char *newname;
|
||||||
free(ctx->hostname);
|
|
||||||
ctx->hostname = strdup(hostname);
|
/*
|
||||||
if (ctx->hostname == NULL) {
|
* Handle the case where hostname == ctx->hostname by copying it first, and
|
||||||
|
* disposing of any previous value after.
|
||||||
|
*/
|
||||||
|
newname = strdup(hostname);
|
||||||
|
if (newname == NULL) {
|
||||||
krb5_set_error_message(context, ENOMEM, N_("malloc: out of memory", ""));
|
krb5_set_error_message(context, ENOMEM, N_("malloc: out of memory", ""));
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
|
free(ctx->hostname);
|
||||||
|
ctx->hostname = newname;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user