From 8911675d8e8d43f6de1e2f7bf1b2312ab551f7f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Sat, 9 Jun 2007 15:39:05 +0000 Subject: [PATCH] (kdc_alloc): free memory on failure, pointed out by Rafal Malinowski. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@21037 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/gssapi/ntlm/digest.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/gssapi/ntlm/digest.c b/lib/gssapi/ntlm/digest.c index 36133a78a..d5aeca774 100644 --- a/lib/gssapi/ntlm/digest.c +++ b/lib/gssapi/ntlm/digest.c @@ -50,6 +50,8 @@ struct ntlmkrb5 { krb5_data sessionkey; }; +static OM_uint32 kdc_destroy(OM_uint32 *, void *); + /* * Get credential cache that the ntlm code can use to talk to the KDC * using the digest API. @@ -126,26 +128,31 @@ kdc_alloc(OM_uint32 *minor, void **ctx) { krb5_error_code ret; struct ntlmkrb5 *c; + OM_uint32 junk; c = calloc(1, sizeof(*c)); + if (c == NULL) { + *minor = ENOMEM; + return GSS_S_FAILURE; + } ret = krb5_init_context(&c->context); if (ret) { - /* free */ + kdc_destroy(&junk, c); *minor = ret; return GSS_S_FAILURE; } ret = get_ccache(c->context, &c->id); if (ret) { - /* free */ + kdc_destroy(&junk, c); *minor = ret; return GSS_S_FAILURE; } ret = krb5_ntlm_alloc(c->context, &c->ntlm); if (ret) { - /* free */ + kdc_destroy(&junk, c); *minor = ret; return GSS_S_FAILURE; }