]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
*** empty log message ***
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Tue, 18 May 2004 10:44:15 +0000 (10:44 +0000)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Tue, 18 May 2004 10:44:15 +0000 (10:44 +0000)
lib/minitasn1/decoding.c

index 976777e40fcda4b937c18ef407ee27c6e7c30d9e..de3573a38644ac91a9ea4a1e8ded21860e3ce01e 100644 (file)
@@ -122,18 +122,22 @@ _asn1_get_octet_der(const unsigned char *der,int *der_len,unsigned char *str,int
 
 
 
-
-void
+/* Returns ASN1_SUCCESS on success or an error code on error.
+ */
+int
 _asn1_get_time_der(const unsigned char *der,int *der_len,unsigned char *str,int str_size)
 {
   int len_len,str_len;
 
-  if(str==NULL) return;
+  if(str==NULL) return ASN1_DER_ERROR;
   str_len=_asn1_get_length_der(der,&len_len);
-  if (str_len < 0 || str_size < str_len) return;
+  if (str_len < 0 || str_size < str_len) 
+     return ASN1_DER_ERROR;
   memcpy(str,der+len_len,str_len);
   str[str_len]=0;
   *der_len=str_len+len_len;
+  
+  return ASN1_SUCCESS;
 }
 
 
@@ -513,7 +517,7 @@ asn1_der_decoding(ASN1_TYPE *element,const void *ider,int len,
   int counter,len2,len3,len4,move,ris;
   unsigned char class,*temp2;
   unsigned int tag;
-  int indefinite;
+  int indefinite, result;
   const unsigned char* der = ider;
 
   node=*element;
@@ -687,7 +691,11 @@ asn1_der_decoding(ASN1_TYPE *element,const void *ider,int len,
        move=RIGHT;
       break;
       case TYPE_TIME:
-       _asn1_get_time_der(der+counter,&len2,temp,sizeof(temp)-1);
+       result = _asn1_get_time_der(der+counter,&len2,temp,sizeof(temp)-1);
+       if (result != ASN1_SUCCESS) {
+               asn1_delete_structure(element);
+               return result;
+       }
        _asn1_set_value(p,temp,strlen(temp)+1);
        counter+=len2;
        move=RIGHT;
@@ -933,7 +941,7 @@ asn1_der_decoding_element(ASN1_TYPE *structure,const char *elementName,
   int counter,len2,len3,len4,move,ris;
   unsigned char class,*temp2;
   unsigned int tag;
-  int indefinite;
+  int indefinite, result;
   const unsigned char* der = ider;
 
   node=*structure;
@@ -1159,7 +1167,12 @@ asn1_der_decoding_element(ASN1_TYPE *structure,const char *elementName,
       break;
       case TYPE_TIME:
        if(state==FOUND){
-         _asn1_get_time_der(der+counter,&len2,temp,sizeof(temp)-1);
+         result = _asn1_get_time_der(der+counter,&len2,temp,sizeof(temp)-1);
+         if (result != ASN1_SUCCESS) {
+               asn1_delete_structure(structure);
+               return result;
+         }
+
          _asn1_set_value(p,temp,strlen(temp)+1);
          
          if(p==nodeFound) state=EXIT;