summaryrefslogtreecommitdiff
path: root/lib/minitasn1
diff options
context:
space:
mode:
authorSimon Josefsson <simon@josefsson.org>2006-02-08 17:03:28 +0000
committerSimon Josefsson <simon@josefsson.org>2006-02-08 17:03:28 +0000
commit4e12a0ae7fc5a3dff9df49a3a3b8f6cd28dc58cd (patch)
tree31433a07e095a32ac4dba512641c5e8c52ce06f1 /lib/minitasn1
parent0ba523abc8c2cc6f205fd186983d0a331d9d4409 (diff)
downloadgnutls-4e12a0ae7fc5a3dff9df49a3a3b8f6cd28dc58cd.tar.gz
Fix asn1_get_length_der usage.
Diffstat (limited to 'lib/minitasn1')
-rw-r--r--lib/minitasn1/element.c1
-rw-r--r--lib/minitasn1/structure.c25
2 files changed, 18 insertions, 8 deletions
diff --git a/lib/minitasn1/element.c b/lib/minitasn1/element.c
index 35ae24fd99..ea3a1769ca 100644
--- a/lib/minitasn1/element.c
+++ b/lib/minitasn1/element.c
@@ -725,6 +725,7 @@ asn1_read_value(ASN1_TYPE root,const char *name,void* ivalue, int *len)
case TYPE_ANY:
len3=-1;
len2=_asn1_get_length_der(node->value,node->value_len,&len3);
+ if (len2 < 0) return ASN1_DER_ERROR;
PUT_VALUE( value, value_size, node->value+len3, len2);
break;
default:
diff --git a/lib/minitasn1/structure.c b/lib/minitasn1/structure.c
index 4ed0f0bf66..46bc8abe84 100644
--- a/lib/minitasn1/structure.c
+++ b/lib/minitasn1/structure.c
@@ -1,6 +1,6 @@
/*
+ * Copyright (C) 2004, 2006 Free Software Foundation
* Copyright (C) 2002 Fabio Fiorina
- * Copyright (C) 2004 Simon Josefsson
*
* This file is part of LIBASN1.
*
@@ -363,6 +363,7 @@ _asn1_copy_structure3(node_asn *source_node)
case TYPE_INTEGER:
len2=-1;
len=_asn1_get_length_der(p_s->value,p_s->value_len,&len2);
+ if (len < 0) return NULL;
_asn1_set_value(p_d,p_s->value,len+len2);
break;
default:
@@ -728,7 +729,8 @@ asn1_print_structure(FILE *out,ASN1_TYPE structure,const char *name,int mode)
len2=-1;
len=_asn1_get_length_der(p->value,p->value_len,&len2);
fprintf(out," value:0x");
- for(k=0;k<len;k++) fprintf(out,"%02x",(p->value)[k+len2]);
+ if (len > 0)
+ for(k=0;k<len;k++) fprintf(out,"%02x",(p->value)[k+len2]);
}
break;
case TYPE_ENUMERATED:
@@ -736,7 +738,8 @@ asn1_print_structure(FILE *out,ASN1_TYPE structure,const char *name,int mode)
len2=-1;
len=_asn1_get_length_der(p->value,p->value_len,&len2);
fprintf(out," value:0x");
- for(k=0;k<len;k++) fprintf(out,"%02x",(p->value)[k+len2]);
+ if (len > 0)
+ for(k=0;k<len;k++) fprintf(out,"%02x",(p->value)[k+len2]);
}
break;
case TYPE_TIME:
@@ -752,8 +755,11 @@ asn1_print_structure(FILE *out,ASN1_TYPE structure,const char *name,int mode)
if(p->value){
len2=-1;
len=_asn1_get_length_der(p->value,p->value_len,&len2);
- fprintf(out," value(%i):",(len-1)*8-(p->value[len2]));
- for(k=1;k<len;k++) fprintf(out,"%02x",(p->value)[k+len2]);
+ if (len>0)
+ {
+ fprintf(out," value(%i):",(len-1)*8-(p->value[len2]));
+ for(k=1;k<len;k++) fprintf(out,"%02x",(p->value)[k+len2]);
+ }
}
break;
case TYPE_OCTET_STRING:
@@ -761,7 +767,8 @@ asn1_print_structure(FILE *out,ASN1_TYPE structure,const char *name,int mode)
len2=-1;
len=_asn1_get_length_der(p->value,p->value_len,&len2);
fprintf(out," value:");
- for(k=0;k<len;k++) fprintf(out,"%02x",(p->value)[k+len2]);
+ if (len>0)
+ for(k=0;k<len;k++) fprintf(out,"%02x",(p->value)[k+len2]);
}
break;
case TYPE_GENERALSTRING:
@@ -769,7 +776,8 @@ asn1_print_structure(FILE *out,ASN1_TYPE structure,const char *name,int mode)
len2=-1;
len=_asn1_get_length_der(p->value,p->value_len,&len2);
fprintf(out," value:");
- for(k=0;k<len;k++) fprintf(out,"%02x",(p->value)[k+len2]);
+ if (len>0)
+ for(k=0;k<len;k++) fprintf(out,"%02x",(p->value)[k+len2]);
}
break;
case TYPE_OBJECT_ID:
@@ -780,7 +788,8 @@ asn1_print_structure(FILE *out,ASN1_TYPE structure,const char *name,int mode)
len3=-1;
len2=_asn1_get_length_der(p->value,p->value_len,&len3);
fprintf(out," value:");
- for(k=0;k<len2;k++) fprintf(out,"%02x",(p->value)[k+len3]);
+ if (len2>0)
+ for(k=0;k<len2;k++) fprintf(out,"%02x",(p->value)[k+len3]);
}
break;
case TYPE_SET: