(krb5_copy_ticket): free all data when failing, copy data to right
memory, the later pointed out by Luke Howard. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@12709 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -51,7 +51,10 @@ krb5_copy_ticket(krb5_context context,
|
|||||||
krb5_ticket **to)
|
krb5_ticket **to)
|
||||||
{
|
{
|
||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
krb5_ticket *tmp = malloc(sizeof(*tmp));
|
krb5_ticket *tmp;
|
||||||
|
|
||||||
|
*to = NULL;
|
||||||
|
tmp = malloc(sizef(*tmp));
|
||||||
if(tmp == NULL) {
|
if(tmp == NULL) {
|
||||||
krb5_set_error_string (context, "malloc: out of memory");
|
krb5_set_error_string (context, "malloc: out of memory");
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
@@ -63,12 +66,14 @@ krb5_copy_ticket(krb5_context context,
|
|||||||
ret = krb5_copy_principal(context, from->client, &tmp->client);
|
ret = krb5_copy_principal(context, from->client, &tmp->client);
|
||||||
if(ret){
|
if(ret){
|
||||||
free_EncTicketPart(&tmp->ticket);
|
free_EncTicketPart(&tmp->ticket);
|
||||||
|
free(tmp);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
ret = krb5_copy_principal(context, from->server, &(*to)->server);
|
ret = krb5_copy_principal(context, from->server, &tmp->server);
|
||||||
if(ret){
|
if(ret){
|
||||||
krb5_free_principal(context, tmp->client);
|
krb5_free_principal(context, tmp->client);
|
||||||
free_EncTicketPart(&tmp->ticket);
|
free_EncTicketPart(&tmp->ticket);
|
||||||
|
free(tmp);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
*to = tmp;
|
*to = tmp;
|
||||||
|
Reference in New Issue
Block a user