+2002-11-07 Ezra Peisach <epeisach@bu.edu>
+
+ * asn1_k_encode.c (asn1_encode_sam_challenge_2): Test for error
+ returned from asn1buf_insert_oxtetstring and cleanup strctures
+ properly.
+
+ * asn1_k_decode.c (asn1_decode_sam_challenge_2_body): Change
+ sequence_of/end_sequence_of to use
+ sequence_of_no_tagvars/end_sequence_of_no_tagravs to avoid
+ shadowing variables.
+
2002-11-07 Ezra Peisach <epeisach@bu.edu>
* asn1_k_encode.c (add_optstring): Add optional string only if
if (asn1class != CONTEXT_SPECIFIC || construction != CONSTRUCTED)
return ASN1_BAD_ID;
save = subbuf.next;
- { sequence_of(&subbuf);
- end_sequence_of(&subbuf);
+ { sequence_of_no_tagvars(&subbuf);
+ end_sequence_of_no_tagvars(&subbuf);
}
end = subbuf.next;
if ((val->sam_challenge_2_body.data = (char *) malloc(end - save)) == NULL)
return ASN1_MISSING_FIELD;
asn1_addfield((const krb5_checksum **) val->sam_cksum, 1, asn1_encode_sequence_of_checksum);
- asn1buf_insert_octetstring(buf, val->sam_challenge_2_body.length,
- (unsigned char *)val->sam_challenge_2_body.data);
+ retval = asn1buf_insert_octetstring(buf, val->sam_challenge_2_body.length,
+ (unsigned char *)val->sam_challenge_2_body.data);
+ if(retval){
+ asn1buf_destroy(&buf);
+ return retval;
+ }
sum += val->sam_challenge_2_body.length;
retval = asn1_make_etag(buf, CONTEXT_SPECIFIC, 0,
val->sam_challenge_2_body.length, &length);
- if(retval) return retval;
+ if(retval) {
+ asn1buf_destroy(&buf);
+ return retval;
+ }
sum += length;
-
+
asn1_makeseq();
asn1_cleanup();
}