From 3a5d8265cd50543f9470ef81e3ea9432ebb7ab86 Mon Sep 17 00:00:00 2001 From: Simon Josefsson Date: Mon, 30 Oct 2006 11:06:45 +0000 Subject: [PATCH] Handle arbitrary large DER output lenghts. --- src/asn1Coding.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/asn1Coding.c b/src/asn1Coding.c index 91f5325..d1867c7 100644 --- a/src/asn1Coding.c +++ b/src/asn1Coding.c @@ -133,7 +133,7 @@ main(int argc,char *argv[]) FILE *inputFile; char varName[1024]; char value[1024]; - unsigned char der[1024]; + unsigned char *der = NULL; int der_len; int k; @@ -265,19 +265,28 @@ main(int argc,char *argv[]) printf("\n"); asn1_print_structure(stdout,structure,"",ASN1_PRINT_NAME_TYPE_VALUE); - der_len=1024; + der_len=0; asn1_result=asn1_der_coding(structure,"",der,&der_len, errorDescription); + if (asn1_result==ASN1_MEM_ERROR) + { + der = malloc (der_len); + asn1_result=asn1_der_coding(structure,"",der,&der_len, + errorDescription); + } printf("\nCoding: %s\n\n",libtasn1_strerror(asn1_result)); if(asn1_result!=ASN1_SUCCESS){ printf("asn1Coding: %s\n",errorDescription); + if (der) + free (der); + asn1_delete_structure(&definitions); asn1_delete_structure(&structure); - + free(inputFileAsnName); free(inputFileAssignmentName); - + exit(1); } @@ -286,6 +295,9 @@ main(int argc,char *argv[]) for(k=0;k