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/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) ||