Check range on SEQ OF and OCTET STRING.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@21395 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		| @@ -202,6 +202,32 @@ find_tag (const Type *t, | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| range_check(const char *name, | ||||
| 	    const char *length, | ||||
| 	    const char *forwstr,  | ||||
| 	    struct range *r) | ||||
| { | ||||
|     if (r->min == r->max + 2 || r->min < r->max) | ||||
| 	fprintf (codefile, | ||||
| 		 "if ((%s)->%s > %d) {\n" | ||||
| 		 "e = ASN1_MAX_CONSTRAINT; %s;\n" | ||||
| 		 "}\n", | ||||
| 		 name, length, r->max, forwstr); | ||||
|     if (r->min - 1 == r->max || r->min < r->max) | ||||
| 	fprintf (codefile, | ||||
| 		 "if ((%s)->%s < %d) {\n" | ||||
| 		 "e = ASN1_MIN_CONSTRAINT; %s;\n" | ||||
| 		 "}\n", | ||||
| 		 name, length, r->min, forwstr); | ||||
|     if (r->max == r->min) | ||||
| 	fprintf (codefile, | ||||
| 		 "if ((%s)->%s != %d) {\n" | ||||
| 		 "e = ASN1_EXACT_CONSTRAINT; %s;\n" | ||||
| 		 "}\n", | ||||
| 		 name, length, r->min, forwstr); | ||||
| } | ||||
|  | ||||
| static int | ||||
| decode_type (const char *name, const Type *t, int optional,  | ||||
| 	     const char *forwstr, const char *tmpstr) | ||||
| @@ -262,6 +288,8 @@ decode_type (const char *name, const Type *t, int optional, | ||||
| 	break; | ||||
|     case TOctetString: | ||||
| 	decode_primitive ("octet_string", name, forwstr); | ||||
| 	if (t->range) | ||||
| 	    range_check(name, "length", forwstr, t->range); | ||||
| 	break; | ||||
|     case TBitString: { | ||||
| 	Member *m; | ||||
| @@ -437,6 +465,8 @@ decode_type (const char *name, const Type *t, int optional, | ||||
| 		 "}\n", | ||||
| 		 name, | ||||
| 		 tmpstr, tmpstr); | ||||
| 	if (t->range) | ||||
| 	    range_check(name, "len", forwstr, t->range); | ||||
| 	free (n); | ||||
| 	free (sname); | ||||
| 	break; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Love Hörnquist Åstrand
					Love Hörnquist Åstrand