diff options
author | Greg Hudson <ghudson@mit.edu> | 2013-03-25 19:17:34 -0400 |
---|---|---|
committer | Greg Hudson <ghudson@mit.edu> | 2013-03-26 13:01:29 -0400 |
commit | 58871c23ee9b5a9201f479127fda65e7fcf06310 (patch) | |
tree | 4f12cad0173686fd11f5edbbe849b741c739709e /src/kdc/kdc_authdata.c | |
parent | 47ec1ab146334f94b97e6572904a14ad67ee2524 (diff) | |
download | krb5-proxymech.tar.gz krb5-proxymech.tar.xz krb5-proxymech.zip |
Fix minor KDC memory leaksproxymech
Fix some small memory leaks which happen only in rare failure
conditions. Reported by Will Fiveash <will.fiveash@oracle.com>.
Diffstat (limited to 'src/kdc/kdc_authdata.c')
-rw-r--r-- | src/kdc/kdc_authdata.c | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/src/kdc/kdc_authdata.c b/src/kdc/kdc_authdata.c index ed0b28157..5a50a4762 100644 --- a/src/kdc/kdc_authdata.c +++ b/src/kdc/kdc_authdata.c @@ -489,7 +489,8 @@ merge_authdata (krb5_context context, krb5_boolean ignore_kdc_issued) { size_t i, j, nadata = 0; - krb5_authdata **authdata = *out_authdata; + krb5_authdata **in_copy = NULL, **authdata = *out_authdata; + krb5_error_code code; if (in_authdata == NULL || in_authdata[0] == NULL) return 0; @@ -502,24 +503,17 @@ merge_authdata (krb5_context context, for (i = 0; in_authdata[i] != NULL; i++) ; - if (authdata == NULL) { - authdata = (krb5_authdata **)calloc(i + 1, sizeof(krb5_authdata *)); - } else { - authdata = (krb5_authdata **)realloc(authdata, - ((nadata + i + 1) * sizeof(krb5_authdata *))); - } - if (authdata == NULL) - return ENOMEM; - if (copy) { - krb5_error_code code; - krb5_authdata **tmp; - - code = krb5_copy_authdata(context, in_authdata, &tmp); + code = krb5_copy_authdata(context, in_authdata, &in_copy); if (code != 0) return code; + in_authdata = in_copy; + } - in_authdata = tmp; + authdata = realloc(authdata, (nadata + i + 1) * sizeof(krb5_authdata *)); + if (authdata == NULL) { + krb5_free_authdata(context, in_copy); + return ENOMEM; } for (i = 0, j = 0; in_authdata[i] != NULL; i++) { |