krb5 commit: Clean up memory handling in krb5_fwd_tgt_creds()

Tom Yu <[email protected]>
Newsgroups gmane.comp.encryption.kerberos.cvs
Message-ID <[email protected]>
https://github.com/krb5/krb5/commit/182c4bf1a3d70efe3894f3b57b68f9988765d48d
commit 182c4bf1a3d70efe3894f3b57b68f9988765d48d
Author: Greg Hudson <[email protected]>
Date:   Sat Dec 17 22:34:28 2016 -0500

    Clean up memory handling in krb5_fwd_tgt_creds()
    
    Use distinct local variables to own allocated resources which we must
    release at function exit, instead of using parameter variables and
    flags.
    
    ticket: 8527 (new)

 src/lib/krb5/krb/fwd_tgt.c |   23 +++++++++++------------
 1 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/src/lib/krb5/krb/fwd_tgt.c b/src/lib/krb5/krb/fwd_tgt.c
index a217d4c..a8d7e76 100644
--- a/src/lib/krb5/krb/fwd_tgt.c
+++ b/src/lib/krb5/krb/fwd_tgt.c
@@ -48,8 +48,8 @@ krb5_fwd_tgt_creds(krb5_context context, krb5_auth_context auth_context,
     krb5_creds creds, tgt;
     krb5_creds *pcreds;
     krb5_flags kdcoptions;
-    int close_cc = 0;
-    int free_rhost = 0;
+    krb5_ccache defcc = NULL;
+    char *def_rhost = NULL;
     krb5_enctype enctype = 0;
     krb5_keyblock *session_key;
     krb5_boolean old_use_conf_ktypes = context->use_conf_ktypes;
@@ -58,9 +58,9 @@ krb5_fwd_tgt_creds(krb5_context context, krb5_auth_context auth_context,
     memset(&tgt, 0, sizeof(creds));
 
     if (cc == 0) {
-        if ((retval = krb5int_cc_default(context, &cc)))
+        if ((retval = krb5int_cc_default(context, &defcc)))
             goto errout;
-        close_cc = 1;
+        cc = defcc;
     }
     retval = krb5_auth_con_getkey (context, auth_context, &session_key);
     if (retval)
@@ -131,11 +131,11 @@ krb5_fwd_tgt_creds(krb5_context context, krb5_auth_context auth_context,
                 goto errout;
             }
 
-            rhost = k5memdup0(server->data[1].data, server->data[1].length,
-                              &retval);
-            if (rhost == NULL)
+            def_rhost = k5memdup0(server->data[1].data, server->data[1].length,
+                                  &retval);
+            if (def_rhost == NULL)
                 goto errout;
-            free_rhost = 1;
+            rhost = def_rhost;
         }
 
         retval = k5_os_hostaddr(context, rhost, &addrs);
@@ -176,10 +176,9 @@ krb5_fwd_tgt_creds(krb5_context context, krb5_auth_context auth_context,
 errout:
     if (addrs)
         krb5_free_addresses(context, addrs);
-    if (close_cc)
-        krb5_cc_close(context, cc);
-    if (free_rhost)
-        free(rhost);
+    if (defcc)
+        krb5_cc_close(context, defcc);
+    free(def_rhost);
     krb5_free_cred_contents(context, &creds);
     krb5_free_cred_contents(context, &tgt);
     return retval;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.