From b1f3eb81185e426915ded354fe33860ae0fdbd4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Mon, 18 Jun 2007 10:49:08 +0000 Subject: [PATCH] (pk_rd_pa_reply_enckey): simplify handling of content data (and avoid leaking memory). git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@21109 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/krb5/pkinit.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/lib/krb5/pkinit.c b/lib/krb5/pkinit.c index 8c11a925b..df879406a 100644 --- a/lib/krb5/pkinit.c +++ b/lib/krb5/pkinit.c @@ -955,8 +955,6 @@ pk_rd_pa_reply_enckey(krb5_context context, krb5_error_code ret; struct krb5_pk_cert *host = NULL; size_t size; - int length; - void *p; krb5_data content; heim_oid contentType = { 0, NULL }; @@ -983,9 +981,7 @@ pk_rd_pa_reply_enckey(krb5_context context, "Failed to unenvelope CMS data in PK-INIT reply"); return ret; } - - p = content.data; - length = content.length; + der_free_oid(&contentType); #if 0 /* windows LH with interesting CMS packets, leaks memory */ { @@ -1009,7 +1005,7 @@ pk_rd_pa_reply_enckey(krb5_context context, if (type == COMPAT_WIN2K) { ContentInfo ci; - ret = decode_ContentInfo(p, length, &ci, &size); + ret = decode_ContentInfo(content.data, content.length, &ci, &size); if (ret) { krb5_set_error_string(context, "PKINIT: failed decoding ContentInfo: %d", @@ -1028,14 +1024,17 @@ pk_rd_pa_reply_enckey(krb5_context context, goto out; } krb5_data_free(&content); - content = *ci.content; - p = ci.content->data; - length = ci.content->length; + ret = krb5_data_copy(&content, ci.content->data, ci.content->length); + free_ContentInfo(&ci); + if (ret) { + krb5_set_error_string(context, "PKINIT: out of memory"); + goto out; + } } ret = _krb5_pk_verify_sign(context, - p, - length, + content.data, + content.length, ctx->id, &contentType, &content,