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