Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | typedef struct { | - |
6 | unsigned char *pbData; | - |
7 | int cbData; | - |
8 | } MYBLOB; | - |
9 | | - |
10 | | - |
11 | | - |
12 | | - |
13 | static int | - |
14 | SetBlobCmp(const void *elem1, const void *elem2) | - |
15 | { | - |
16 | const MYBLOB *b1 = (const MYBLOB *)elem1; | - |
17 | const MYBLOB *b2 = (const MYBLOB *)elem2; | - |
18 | int r; | - |
19 | | - |
20 | r = memcmp(b1->pbData, b2->pbData, | - |
21 | b1->cbData < b2->cbData ? b1->cbData : b2->cbData); | - |
22 | if (r != 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
23 | return never executed: return r; r;never executed: return r; | 0 |
24 | return never executed: return b1->cbData - b2->cbData; b1->cbData - b2->cbData;never executed: return b1->cbData - b2->cbData; | 0 |
25 | } | - |
26 | | - |
27 | | - |
28 | int | - |
29 | i2d_ASN1_SET(struct stack_st_OPENSSL_BLOCK *a, unsigned char **pp, i2d_of_void *i2d, | - |
30 | int ex_tag, int ex_class, int is_set) | - |
31 | { | - |
32 | int ret = 0, r; | - |
33 | int i; | - |
34 | unsigned char *p; | - |
35 | unsigned char *pStart, *pTempMem; | - |
36 | MYBLOB *rgSetBlob; | - |
37 | int totSize; | - |
38 | | - |
39 | if (a == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
40 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
41 | ) | - |
42 | return never executed: return 0; 0;never executed: return 0; | 0 |
43 | for (i = sk_num(((_STACK*) (1 ? a : (struct stack_st_OPENSSL_BLOCK*)0))) - 1; i >= 0TRUE | never evaluated | FALSE | never evaluated |
; i--) | 0 |
44 | ret += i2d(((OPENSSL_BLOCK)sk_value(((_STACK*) (1 ? a : (struct stack_st_OPENSSL_BLOCK*)0)), i)), never executed: ret += i2d(((OPENSSL_BLOCK)sk_value(((_STACK*) (1 ? a : (struct stack_st_OPENSSL_BLOCK*)0)), i)), ((void *)0) ); | 0 |
45 | ((void *)0) never executed: ret += i2d(((OPENSSL_BLOCK)sk_value(((_STACK*) (1 ? a : (struct stack_st_OPENSSL_BLOCK*)0)), i)), ((void *)0) ); | 0 |
46 | ); never executed: ret += i2d(((OPENSSL_BLOCK)sk_value(((_STACK*) (1 ? a : (struct stack_st_OPENSSL_BLOCK*)0)), i)), ((void *)0) ); | 0 |
47 | r = ASN1_object_size(1, ret, ex_tag); | - |
48 | if (pp == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
49 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
50 | ) | - |
51 | return never executed: return r; r;never executed: return r; | 0 |
52 | | - |
53 | p = *pp; | - |
54 | ASN1_put_object(&p, 1, ret, ex_tag, ex_class); | - |
55 | | - |
56 | | - |
57 | | - |
58 | | - |
59 | | - |
60 | if (!is_setTRUE | never evaluated | FALSE | never evaluated |
|| (TRUE | never evaluated | FALSE | never evaluated |
sk_num(((_STACK*) (1 ? a : (struct stack_st_OPENSSL_BLOCK*)0))) < 2)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
61 | for (i = 0; i < sk_num(((_STACK*) (1 ? a : (struct stack_st_OPENSSL_BLOCK*)0)))TRUE | never evaluated | FALSE | never evaluated |
; i++) | 0 |
62 | i2d(((OPENSSL_BLOCK)sk_value(((_STACK*) (1 ? a : (struct stack_st_OPENSSL_BLOCK*)0)), i)), &p); never executed: i2d(((OPENSSL_BLOCK)sk_value(((_STACK*) (1 ? a : (struct stack_st_OPENSSL_BLOCK*)0)), i)), &p); | 0 |
63 | | - |
64 | *pp = p; | - |
65 | return never executed: return r; r;never executed: return r; | 0 |
66 | } | - |
67 | | - |
68 | pStart = p; | - |
69 | | - |
70 | rgSetBlob = reallocarray( | - |
71 | ((void *)0) | - |
72 | , sk_num(((_STACK*) (1 ? a : (struct stack_st_OPENSSL_BLOCK*)0))), sizeof(MYBLOB)); | - |
73 | if (rgSetBlob == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
74 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
75 | ) { | - |
76 | ERR_put_error(13,(0xfff),((1|64)),__FILE__,128); | - |
77 | return never executed: return 0; 0;never executed: return 0; | 0 |
78 | } | - |
79 | | - |
80 | for (i = 0; i < sk_num(((_STACK*) (1 ? a : (struct stack_st_OPENSSL_BLOCK*)0)))TRUE | never evaluated | FALSE | never evaluated |
; i++) { | 0 |
81 | rgSetBlob[i].pbData = p; | - |
82 | i2d(((OPENSSL_BLOCK)sk_value(((_STACK*) (1 ? a : (struct stack_st_OPENSSL_BLOCK*)0)), i)), &p); | - |
83 | | - |
84 | rgSetBlob[i].cbData = p - rgSetBlob[i].pbData; | - |
85 | } never executed: end of block | 0 |
86 | *pp = p; | - |
87 | totSize = p - pStart; | - |
88 | | - |
89 | | - |
90 | | - |
91 | | - |
92 | | - |
93 | | - |
94 | qsort(rgSetBlob, sk_num(((_STACK*) (1 ? a : (struct stack_st_OPENSSL_BLOCK*)0))), sizeof(MYBLOB), SetBlobCmp); | - |
95 | if ((TRUE | never evaluated | FALSE | never evaluated |
pTempMem = malloc(totSize)) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
96 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
97 | ) { | - |
98 | free(rgSetBlob); | - |
99 | ERR_put_error(13,(0xfff),((1|64)),__FILE__,149); | - |
100 | return never executed: return 0; 0;never executed: return 0; | 0 |
101 | } | - |
102 | | - |
103 | | - |
104 | p = pTempMem; | - |
105 | for (i = 0; i < sk_num(((_STACK*) (1 ? a : (struct stack_st_OPENSSL_BLOCK*)0)))TRUE | never evaluated | FALSE | never evaluated |
; ++i) { | 0 |
106 | memcpy(p, rgSetBlob[i].pbData, rgSetBlob[i].cbData); | - |
107 | p += rgSetBlob[i].cbData; | - |
108 | } never executed: end of block | 0 |
109 | | - |
110 | | - |
111 | memcpy(pStart, pTempMem, totSize); | - |
112 | free(pTempMem); | - |
113 | free(rgSetBlob); | - |
114 | | - |
115 | return never executed: return r; r;never executed: return r; | 0 |
116 | } | - |
117 | | - |
118 | struct stack_st_OPENSSL_BLOCK * | - |
119 | d2i_ASN1_SET(struct stack_st_OPENSSL_BLOCK **a, const unsigned char **pp, long length, | - |
120 | d2i_of_void *d2i, void (*free_func)(OPENSSL_BLOCK), int ex_tag, | - |
121 | int ex_class) | - |
122 | { | - |
123 | ASN1_const_CTX c; | - |
124 | struct stack_st_OPENSSL_BLOCK *ret = | - |
125 | ((void *)0) | - |
126 | ; | - |
127 | | - |
128 | if (a == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
129 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
130 | || (*TRUE | never evaluated | FALSE | never evaluated |
a) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
131 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
132 | ) { | - |
133 | if ((TRUE | never evaluated | FALSE | never evaluated |
ret = ((struct stack_st_OPENSSL_BLOCK *)sk_new_null())) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
134 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
135 | ) { | - |
136 | ERR_put_error(13,(0xfff),((1|64)),__FILE__,178); | - |
137 | goto never executed: goto err; err;never executed: goto err; | 0 |
138 | } | - |
139 | } never executed: end of block else | 0 |
140 | ret = *a; never executed: ret = *a; | 0 |
141 | | - |
142 | c.p = *pp; | - |
143 | c.max = (TRUE | never evaluated | FALSE | never evaluated |
length == 0)TRUE | never evaluated | FALSE | never evaluated |
? 0 : (c.p + length); | 0 |
144 | | - |
145 | c.inf = ASN1_get_object(&c.p, &c.slen, &c.tag, &c.xclass, c.max - c.p); | - |
146 | if (c.inf & 0x80TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
147 | goto never executed: goto err; err;never executed: goto err; | 0 |
148 | if (ex_class != c.xclassTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
149 | ERR_put_error(13,(0xfff),(101),__FILE__,191); | - |
150 | goto never executed: goto err; err;never executed: goto err; | 0 |
151 | } | - |
152 | if (ex_tag != c.tagTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
153 | ERR_put_error(13,(0xfff),(104),__FILE__,195); | - |
154 | goto never executed: goto err; err;never executed: goto err; | 0 |
155 | } | - |
156 | if (c.slen + c.p > c.maxTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
157 | ERR_put_error(13,(0xfff),(136),__FILE__,199); | - |
158 | goto never executed: goto err; err;never executed: goto err; | 0 |
159 | } | - |
160 | | - |
161 | | - |
162 | if (c.inf == (0x20 + 1)TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
163 | c.slen = length + *pp - c.p; never executed: c.slen = length + *pp - c.p; | 0 |
164 | c.max = c.p + c.slen; | - |
165 | | - |
166 | while (c.p < c.maxTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
167 | char *s; | - |
168 | | - |
169 | if ((((TRUE | never evaluated | FALSE | never evaluated |
c.inf&1) == 0)TRUE | never evaluated | FALSE | never evaluated |
?(c.slen <= 0): (c.eos=ASN1_const_check_infinite_end(&c.p,c.slen)))TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
170 | break; never executed: break; | 0 |
171 | if ((TRUE | never evaluated | FALSE | never evaluated |
s = d2i(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
172 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
173 | , &c.p, c.slen)) == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
174 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
175 | ) { | - |
176 | ERR_put_error(13,(0xfff),(113),__FILE__,214); | - |
177 | asn1_add_error(*pp, (int)(c.p - *pp)); | - |
178 | goto never executed: goto err; err;never executed: goto err; | 0 |
179 | } | - |
180 | if (!sk_push(((_STACK*) (1 ? ret : (struct stack_st_OPENSSL_BLOCK*)0)), ((void*) (1 ? s : (void*)0)))TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
181 | goto never executed: goto err; err;never executed: goto err; | 0 |
182 | } never executed: end of block | 0 |
183 | if (a != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
184 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
185 | ) | - |
186 | * never executed: *a = ret; a = ret;never executed: *a = ret; | 0 |
187 | *pp = c.p; | - |
188 | return never executed: return ret; ret;never executed: return ret; | 0 |
189 | | - |
190 | err: | - |
191 | if (a == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
192 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
193 | || *TRUE | never evaluated | FALSE | never evaluated |
a != retTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
194 | if (free_func != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
195 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
196 | ) | - |
197 | sk_pop_free(((_STACK*) (1 ? ret : (struct stack_st_OPENSSL_BLOCK*)0)), ((void (*)(void *)) ((1 ? free_func : (void (*)(OPENSSL_BLOCK))0)))); never executed: sk_pop_free(((_STACK*) (1 ? ret : (struct stack_st_OPENSSL_BLOCK*)0)), ((void (*)(void *)) ((1 ? free_func : (void (*)(OPENSSL_BLOCK))0)))); | 0 |
198 | else | - |
199 | sk_free(((_STACK*) (1 ? ret : (struct stack_st_OPENSSL_BLOCK*)0))); never executed: sk_free(((_STACK*) (1 ? ret : (struct stack_st_OPENSSL_BLOCK*)0))); | 0 |
200 | } | - |
201 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 |
202 | ((void *)0) never executed: return ((void *)0) ; | 0 |
203 | ; never executed: return ((void *)0) ; | 0 |
204 | } | - |
| | |