In parsing principal - if run out memory - clean up after ourselves.
authorEzra Peisach <epeisach@mit.edu>
Thu, 14 Aug 2008 16:40:07 +0000 (16:40 +0000)
committerEzra Peisach <epeisach@mit.edu>
Thu, 14 Aug 2008 16:40:07 +0000 (16:40 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20658 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/ccache/cc_file.c
src/lib/krb5/ccache/cc_keyring.c

index f69d4929caf6dd6d944ce3c7726cd5b3dc9aecc8..0e5a9b666b644d0e6ff4ac12aacdae0af5f0e349 100644 (file)
@@ -503,6 +503,7 @@ krb5_fcc_read_principal(krb5_context context, krb5_ccache id, krb5_principal *pr
  errout:
     while(--i >= 0)
        free(krb5_princ_component(context, tmpprinc, i)->data);
+    krb5_xfree(krb5_princ_realm(context, tmpprinc)->data);
     free((char *)tmpprinc->data);
     free((char *)tmpprinc);
     return kret;
@@ -1807,9 +1808,15 @@ krb5_fcc_start_seq_get(krb5_context context, krb5_ccache id,
 
      /* Make sure we start reading right after the primary principal */
      kret = krb5_fcc_skip_header(context, id);
-     if (kret) goto done;
+     if (kret) {
+         krb5_xfree(fcursor);
+        goto done;
+     }
      kret = krb5_fcc_skip_principal(context, id);
-     if (kret) goto done;
+     if (kret) {
+         krb5_xfree(fcursor);
+        goto done;
+     }
 
      fcursor->pos = fcc_lseek(data, (off_t) 0, SEEK_CUR);
      *cursor = (krb5_cc_cursor) fcursor;
index 163ad30f729e434d0d4a4ae4ca5a728c3bd42fa8..d892584fee7933b6a3cc53627a1ef7321a1e74e1 100644 (file)
@@ -1360,6 +1360,7 @@ krb5_krcc_parse_principal(krb5_context context, krb5_ccache id,
   errout:
     while (--i >= 0)
        free(krb5_princ_component(context, tmpprinc, i)->data);
+    krb5_xfree(krb5_princ_realm(context, tmpprinc)->data);
     free((char *) tmpprinc->data);
     free((char *) tmpprinc);
     return kret;