lib/krb5: scc_alloc do not leak 'freeme'

Introduce a common 'out' label to avoid leaking 'freeme'.

Change-Id: I8d58efc75125ee553b462372ad160394013f9a3a
This commit is contained in:
Jeffrey Altman
2022-01-16 17:36:17 -05:00
parent 5667e80742
commit c8956523a1

View File

@@ -446,10 +446,8 @@ scc_alloc(krb5_context context,
name += sizeof("SCC:") - 1; name += sizeof("SCC:") - 1;
if ((s->file = strdup(name)) == NULL) { if ((s->file = strdup(name)) == NULL) {
(void) krb5_enomem(context); ret = krb5_enomem(context);
scc_free(s); goto out;
free(freeme);
return NULL;
} }
if ((subsidiary = strrchr(s->file, ':'))) { if ((subsidiary = strrchr(s->file, ':'))) {
@@ -480,11 +478,14 @@ scc_alloc(krb5_context context,
if (ret == 0 && s->file && s->sub && if (ret == 0 && s->file && s->sub &&
(asprintf(&s->name, "%s:%s", s->file, s->sub) < 0 || s->name == NULL)) (asprintf(&s->name, "%s:%s", s->file, s->sub) < 0 || s->name == NULL))
ret = krb5_enomem(context); ret = krb5_enomem(context);
out:
if (ret || s->file == NULL || s->sub == NULL || s->name == NULL) { if (ret || s->file == NULL || s->sub == NULL || s->name == NULL) {
scc_free(s); scc_free(s);
free(freeme); s = NULL;
return NULL;
} }
free(freeme);
return s; return s;
} }