summaryrefslogtreecommitdiffstats
path: root/src/lib/krb5/asn.1/asn1_encode.c
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2009-02-12 18:21:33 +0000
committerGreg Hudson <ghudson@mit.edu>2009-02-12 18:21:33 +0000
commitbcffa165ee7841337bfbbab5043e7bddb5ef7fca (patch)
treeac81d854883525f28b2f9561e952d8870329a730 /src/lib/krb5/asn.1/asn1_encode.c
parenta325faadc86039d4e6ec876f49319251eb7afbc8 (diff)
downloadkrb5-bcffa165ee7841337bfbbab5043e7bddb5ef7fca.tar.gz
krb5-bcffa165ee7841337bfbbab5043e7bddb5ef7fca.tar.xz
krb5-bcffa165ee7841337bfbbab5043e7bddb5ef7fca.zip
Modify asn12krb5_buf and asn1_do_full_encode to make output parameter
values well-defined on error. Clean up memory handling and an unused variable in asn1_do_full_encode. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@21981 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/krb5/asn.1/asn1_encode.c')
-rw-r--r--src/lib/krb5/asn.1/asn1_encode.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/lib/krb5/asn.1/asn1_encode.c b/src/lib/krb5/asn.1/asn1_encode.c
index d79546493..f67c8cfee 100644
--- a/src/lib/krb5/asn.1/asn1_encode.c
+++ b/src/lib/krb5/asn.1/asn1_encode.c
@@ -675,10 +675,13 @@ krb5int_asn1_do_full_encode(const void *rep, krb5_data **code,
{
unsigned int length;
asn1_error_code retval;
- unsigned int sum = 0;
asn1buf *buf = NULL;
+ krb5_data *d;
+
+ *code = NULL;
- if (rep == NULL) return ASN1_MISSING_FIELD;
+ if (rep == NULL)
+ return ASN1_MISSING_FIELD;
retval = asn1buf_create(&buf);
if (retval)
@@ -686,9 +689,12 @@ krb5int_asn1_do_full_encode(const void *rep, krb5_data **code,
retval = krb5int_asn1_encode_a_thing(buf, rep, a, &length);
if (retval)
- return retval;
- sum += length;
- retval = asn12krb5_buf(buf, code);
+ goto cleanup;
+ retval = asn12krb5_buf(buf, &d);
+ if (retval)
+ goto cleanup;
+ *code = d;
+cleanup:
asn1buf_destroy(&buf);
return retval;
}