1 #undef	NDEBUG
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <sys/types.h>
5 #include <string.h>
6 #include <assert.h>
7 
8 #include <T.h>
9 #include <T1.h>
10 
11 uint8_t buf1[] = {
12 	32 | ((2 << 6) + 2),	/* [2], constructed */
13 	6,
14 	32 | ((2 << 6) + 3),	/* [3], constructed */
15 	4,
16 	32 | ((2 << 6) + 4),	/* [4], constructed */
17 	2,
18 	0  | ((2 << 6) + 6),	/* [6], primitive */
19 	0
20 };
21 
22 uint8_t buf2[] = {
23 
24 	32 | ((2 << 6) + 0),	/* [0], constructed */
25 	23,
26 
27 	32 | ((2 << 6) + 1),	/* [1], constructed */
28 	6,
29 	32 | ((2 << 6) + 4),	/* [4], constructed */
30 	4,
31 	0  | ((2 << 6) + 6),	/* [6], primitive */
32 	2,
33   0xC0,
34   0x00,
35 
36 	32 | ((2 << 6) + 2),	/* [2], constructed */
37 	6,
38 	32 | ((2 << 6) + 4),	/* [4], constructed */
39 	4,
40 	0  | ((2 << 6) + 6),	/* [6], primitive */
41 	2,
42   0x80,
43   0x00,
44 
45 	32 | ((2 << 6) + 3),	/* [3], constructed */
46 	5,
47 	0  | ((2 << 6) + 6),	/* [6], primitive */
48 	3,
49   0x80,
50   0x01,
51   0x02,
52 };
53 
54 static void
check_1(int is_ok,uint8_t * buf,size_t size,size_t consumed)55 check_1(int is_ok, uint8_t *buf, size_t size, size_t consumed) {
56 	asn_TYPE_descriptor_t *td = &asn_DEF_T1;
57 	asn_dec_rval_t rval;
58 	T1_t t, *tp;
59 
60 	tp = memset(&t, 0, sizeof(t));
61 
62 	fprintf(stderr, "Buf %p\n", buf);
63 	rval = ber_decode(0, td, (void **)&tp, buf, size);
64 	fprintf(stderr, "Returned code %d, consumed %zd\n",
65 		(int)rval.code, rval.consumed);
66 
67 	if(is_ok) {
68 		assert(rval.code == RC_OK);
69 		assert(rval.consumed == consumed);
70 	} else {
71 		if(rval.code == RC_OK) {
72 		}
73 		assert(rval.consumed <= consumed);
74 	}
75 }
76 
77 static void
check_2(int is_ok,uint8_t * buf,size_t size,size_t consumed)78 check_2(int is_ok, uint8_t *buf, size_t size, size_t consumed) {
79 	asn_TYPE_descriptor_t *td = &asn_DEF_T;
80 	asn_dec_rval_t rval;
81 	T_t t, *tp;
82 
83 	tp = memset(&t, 0, sizeof(t));
84 
85 	fprintf(stderr, "Buf %p\n", buf);
86 	rval = ber_decode(0, td, (void **)&tp, buf, size);
87 	fprintf(stderr, "Returned code %d, consumed %zd\n",
88 		(int)rval.code, rval.consumed);
89 
90 	if(is_ok) {
91 		assert(rval.code == RC_OK);
92 		assert(rval.consumed == consumed);
93 	} else {
94 		if(rval.code == RC_OK) {
95 		}
96 		assert(rval.consumed <= consumed);
97 	}
98 }
99 
100 int
main(int ac,char ** av)101 main(int ac, char **av) {
102 
103 	(void)ac;	/* Unused argument */
104 	(void)av;	/* Unused argument */
105 
106 	check_1(1, buf1, sizeof(buf1), sizeof(buf1));
107 	check_1(0, buf1, sizeof(buf1) - 1, sizeof(buf1) - 1);
108 
109 	check_2(1, buf2, sizeof(buf2), sizeof(buf2));
110 	check_2(0, buf2, sizeof(buf2) - 1, sizeof(buf2) - 1);
111 
112 	return 0;
113 }
114