Index: src/clients/klist/klist.c
===================================================================
RCS file: /cvs/krbdev/krb5/src/clients/klist/klist.c,v
retrieving revision 5.47.2.1.2.2
diff -c -r5.47.2.1.2.2 klist.c
*** src/clients/klist/klist.c	25 Sep 2001 20:41:50 -0000	5.47.2.1.2.2
--- src/clients/klist/klist.c	23 Aug 2004 03:54:47 -0000
***************
*** 617,622 ****
--- 617,625 ----
  
      if (show_etype) {
  	retval = krb5_decode_ticket(&cred->ticket, &tkt);
+ 	if (retval)
+ 	    goto err_tkt;
+ 
  	if (!extra_field)
  	    fputs("\t",stdout);
  	else
***************
*** 625,632 ****
  	       etype_string(cred->keyblock.enctype));
  	printf("%s ",
  	       etype_string(tkt->enc_part.enctype));
- 	krb5_free_ticket(kcontext, tkt);
  	extra_field++;
      }
  
      /* if any additional info was printed, extra_field is non-zero */
--- 628,638 ----
  	       etype_string(cred->keyblock.enctype));
  	printf("%s ",
  	       etype_string(tkt->enc_part.enctype));
  	extra_field++;
+ 
+     err_tkt:
+ 	if (tkt != NULL)
+ 	    krb5_free_ticket(kcontext, tkt);
      }
  
      /* if any additional info was printed, extra_field is non-zero */
Index: src/krb524/krb524d.c
===================================================================
RCS file: /cvs/krbdev/krb5/src/krb524/krb524d.c,v
retrieving revision 1.40.4.5
diff -c -r1.40.4.5 krb524d.c
*** src/krb524/krb524d.c	2 Apr 2003 04:25:16 -0000	1.40.4.5
--- src/krb524/krb524d.c	23 Aug 2004 03:54:48 -0000
***************
*** 535,542 ****
  	  printf("v4 credentials encoded\n");
  
   error:
!      if (v5tkt->enc_part2)
  	 krb5_free_enc_tkt_part(context, v5tkt->enc_part2);
  
       if(v5_service_key.contents)
         krb5_free_keyblock_contents(context, &v5_service_key);
--- 535,544 ----
  	  printf("v4 credentials encoded\n");
  
   error:
!      if (v5tkt->enc_part2) {
  	 krb5_free_enc_tkt_part(context, v5tkt->enc_part2);
+ 	 v5tkt->enc_part2 = NULL;
+      }
  
       if(v5_service_key.contents)
         krb5_free_keyblock_contents(context, &v5_service_key);
Index: src/lib/krb5/asn.1/asn1buf.c
===================================================================
RCS file: /cvs/krbdev/krb5/src/lib/krb5/asn.1/asn1buf.c,v
retrieving revision 5.19.2.1
diff -c -r5.19.2.1 asn1buf.c
*** src/lib/krb5/asn.1/asn1buf.c	31 Jan 2001 18:00:12 -0000	5.19.2.1
--- src/lib/krb5/asn.1/asn1buf.c	23 Aug 2004 03:54:50 -0000
***************
*** 295,300 ****
--- 295,301 ----
    (*code)->data = (char*)malloc((((*code)->length)+1)*sizeof(char));
    if ((*code)->data == NULL) {
      free(*code);
+     *code = NULL;
      return ENOMEM;
    }
    for(i=0; i < (*code)->length; i++)
Index: src/lib/krb5/asn.1/krb5_decode.c
===================================================================
RCS file: /cvs/krbdev/krb5/src/lib/krb5/asn.1/krb5_decode.c,v
retrieving revision 5.34.2.1
diff -c -r5.34.2.1 krb5_decode.c
*** src/lib/krb5/asn.1/krb5_decode.c	31 Jan 2001 18:00:13 -0000	5.34.2.1
--- src/lib/krb5/asn.1/krb5_decode.c	23 Aug 2004 03:54:50 -0000
***************
*** 157,164 ****
  #define cleanup(cleanup_routine)\
     return 0; \
  error_out: \
!    if (rep && *rep) \
  	cleanup_routine(*rep); \
     return retval;
  
  #define cleanup_none()\
--- 157,166 ----
  #define cleanup(cleanup_routine)\
     return 0; \
  error_out: \
!    if (rep && *rep) { \
  	cleanup_routine(*rep); \
+ 	*rep = NULL; \
+    } \
     return retval;
  
  #define cleanup_none()\
***************
*** 209,214 ****
--- 211,217 ----
        free_field(*rep,checksum);
        free_field(*rep,client);
        free(*rep);
+       *rep = NULL;
    }
    return retval;
  }
***************
*** 234,240 ****
    { begin_structure();
      { krb5_kvno kvno;
        get_field(kvno,0,asn1_decode_kvno);
!       if(kvno != KVNO) return KRB5KDC_ERR_BAD_PVNO;
      }
      alloc_field((*rep)->server,krb5_principal_data);
      get_field((*rep)->server,1,asn1_decode_realm);
--- 237,243 ----
    { begin_structure();
      { krb5_kvno kvno;
        get_field(kvno,0,asn1_decode_kvno);
!       if(kvno != KVNO) clean_return(KRB5KDC_ERR_BAD_PVNO);
      }
      alloc_field((*rep)->server,krb5_principal_data);
      get_field((*rep)->server,1,asn1_decode_realm);
***************
*** 248,253 ****
--- 251,257 ----
    if (rep && *rep) {
        free_field(*rep,server);
        free(*rep);
+       *rep = NULL;
    }
    return retval;
  }
***************
*** 304,309 ****
--- 308,314 ----
        free_field(*rep,session);
        free_field(*rep,client);
        free(*rep);
+       *rep = NULL;
    }
    return retval;
  }
***************
*** 394,399 ****
--- 399,405 ----
    if (rep && *rep) {
        free_field(*rep,ticket);
        free(*rep);
+       *rep = NULL;
    }
    return retval;
  }
***************
*** 446,451 ****
--- 452,458 ----
    if (rep && *rep) {
        free_field(*rep,subkey);
        free(*rep);
+       *rep = NULL;
    }
    return retval;
  }
***************
*** 527,532 ****
--- 534,540 ----
    if (rep && *rep) {
        free_field(*rep,checksum);
        free(*rep);
+       *rep = NULL;
    }
    return retval;
  }
***************
*** 584,589 ****
--- 592,598 ----
        free_field(*rep,r_address);
        free_field(*rep,s_address);
        free(*rep);
+       *rep = NULL;
    }
    return retval;
  }
***************
*** 642,647 ****
--- 651,657 ----
        free_field(*rep,r_address);
        free_field(*rep,s_address);
        free(*rep);
+       *rep = NULL;
    }
    return retval;
  }
***************
*** 689,694 ****
--- 699,705 ----
        free_field(*rep,server);
        free_field(*rep,client);
        free(*rep);
+       *rep = NULL;
    }
    return retval;
  }
Index: src/lib/krb5/krb/rd_cred.c
===================================================================
RCS file: /cvs/krbdev/krb5/src/lib/krb5/krb/rd_cred.c,v
retrieving revision 5.34.10.2
diff -c -r5.34.10.2 rd_cred.c
*** src/lib/krb5/krb/rd_cred.c	13 Mar 2002 19:43:27 -0000	5.34.10.2
--- src/lib/krb5/krb/rd_cred.c	23 Aug 2004 03:54:50 -0000
***************
*** 37,51 ****
  
      /*  now decode the decrypted stuff */
      if ((retval = decode_krb5_enc_cred_part(&scratch, &ppart)))
!     	goto cleanup_encpart;
  
      *pcredenc = *ppart;
      retval = 0;
  
- cleanup_encpart:
-     memset(ppart, 0, sizeof(*ppart));
-     krb5_xfree(ppart);
- 
  cleanup:
      memset(scratch.data, 0, scratch.length);
      krb5_xfree(scratch.data);
--- 37,47 ----
  
      /*  now decode the decrypted stuff */
      if ((retval = decode_krb5_enc_cred_part(&scratch, &ppart)))
!     	goto cleanup;
  
      *pcredenc = *ppart;
      retval = 0;
  
  cleanup:
      memset(scratch.data, 0, scratch.length);
      krb5_xfree(scratch.data);
Index: src/lib/krb5/krb/rd_rep.c
===================================================================
RCS file: /cvs/krbdev/krb5/src/lib/krb5/krb/rd_rep.c,v
retrieving revision 5.29
diff -c -r5.29 rd_rep.c
*** src/lib/krb5/krb/rd_rep.c	24 Sep 1999 21:19:38 -0000	5.29
--- src/lib/krb5/krb/rd_rep.c	23 Aug 2004 03:54:50 -0000
***************
*** 75,80 ****
--- 75,82 ----
  
      /* now decode the decrypted stuff */
      retval = decode_krb5_ap_rep_enc_part(&scratch, repl);
+     if (retval)
+ 	goto clean_scratch;
  
      /* Check reply fields */
      if (((*repl)->ctime != auth_context->authentp->ctime) ||
