-
-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;
}
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;
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;
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;
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;