Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/asn1/bio_asn1.c |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||||||||||||||||||||
2 | - | |||||||||||||||||||||||||||||||
3 | - | |||||||||||||||||||||||||||||||
4 | - | |||||||||||||||||||||||||||||||
5 | - | |||||||||||||||||||||||||||||||
6 | typedef enum { | - | ||||||||||||||||||||||||||||||
7 | ASN1_STATE_START, | - | ||||||||||||||||||||||||||||||
8 | ASN1_STATE_PRE_COPY, | - | ||||||||||||||||||||||||||||||
9 | ASN1_STATE_HEADER, | - | ||||||||||||||||||||||||||||||
10 | ASN1_STATE_HEADER_COPY, | - | ||||||||||||||||||||||||||||||
11 | ASN1_STATE_DATA_COPY, | - | ||||||||||||||||||||||||||||||
12 | ASN1_STATE_POST_COPY, | - | ||||||||||||||||||||||||||||||
13 | ASN1_STATE_DONE | - | ||||||||||||||||||||||||||||||
14 | } asn1_bio_state_t; | - | ||||||||||||||||||||||||||||||
15 | - | |||||||||||||||||||||||||||||||
16 | typedef struct BIO_ASN1_EX_FUNCS_st { | - | ||||||||||||||||||||||||||||||
17 | asn1_ps_func *ex_func; | - | ||||||||||||||||||||||||||||||
18 | asn1_ps_func *ex_free_func; | - | ||||||||||||||||||||||||||||||
19 | } BIO_ASN1_EX_FUNCS; | - | ||||||||||||||||||||||||||||||
20 | - | |||||||||||||||||||||||||||||||
21 | typedef struct BIO_ASN1_BUF_CTX_t { | - | ||||||||||||||||||||||||||||||
22 | - | |||||||||||||||||||||||||||||||
23 | asn1_bio_state_t state; | - | ||||||||||||||||||||||||||||||
24 | - | |||||||||||||||||||||||||||||||
25 | unsigned char *buf; | - | ||||||||||||||||||||||||||||||
26 | - | |||||||||||||||||||||||||||||||
27 | int bufsize; | - | ||||||||||||||||||||||||||||||
28 | - | |||||||||||||||||||||||||||||||
29 | int bufpos; | - | ||||||||||||||||||||||||||||||
30 | - | |||||||||||||||||||||||||||||||
31 | int buflen; | - | ||||||||||||||||||||||||||||||
32 | - | |||||||||||||||||||||||||||||||
33 | int copylen; | - | ||||||||||||||||||||||||||||||
34 | - | |||||||||||||||||||||||||||||||
35 | int asn1_class, asn1_tag; | - | ||||||||||||||||||||||||||||||
36 | asn1_ps_func *prefix, *prefix_free, *suffix, *suffix_free; | - | ||||||||||||||||||||||||||||||
37 | - | |||||||||||||||||||||||||||||||
38 | unsigned char *ex_buf; | - | ||||||||||||||||||||||||||||||
39 | int ex_len; | - | ||||||||||||||||||||||||||||||
40 | int ex_pos; | - | ||||||||||||||||||||||||||||||
41 | void *ex_arg; | - | ||||||||||||||||||||||||||||||
42 | } BIO_ASN1_BUF_CTX; | - | ||||||||||||||||||||||||||||||
43 | - | |||||||||||||||||||||||||||||||
44 | - | |||||||||||||||||||||||||||||||
45 | static int asn1_bio_write(BIO *h, const char *buf, int num); | - | ||||||||||||||||||||||||||||||
46 | static int asn1_bio_read(BIO *h, char *buf, int size); | - | ||||||||||||||||||||||||||||||
47 | static int asn1_bio_puts(BIO *h, const char *str); | - | ||||||||||||||||||||||||||||||
48 | static int asn1_bio_gets(BIO *h, char *str, int size); | - | ||||||||||||||||||||||||||||||
49 | static long asn1_bio_ctrl(BIO *h, int cmd, long arg1, void *arg2); | - | ||||||||||||||||||||||||||||||
50 | static int asn1_bio_new(BIO *h); | - | ||||||||||||||||||||||||||||||
51 | static int asn1_bio_free(BIO *data); | - | ||||||||||||||||||||||||||||||
52 | static long asn1_bio_callback_ctrl(BIO *h, int cmd, bio_info_cb *fp); | - | ||||||||||||||||||||||||||||||
53 | - | |||||||||||||||||||||||||||||||
54 | static int asn1_bio_init(BIO_ASN1_BUF_CTX *ctx, int size); | - | ||||||||||||||||||||||||||||||
55 | static int asn1_bio_flush_ex(BIO *b, BIO_ASN1_BUF_CTX *ctx, | - | ||||||||||||||||||||||||||||||
56 | asn1_ps_func *cleanup, asn1_bio_state_t next); | - | ||||||||||||||||||||||||||||||
57 | static int asn1_bio_setup_ex(BIO *b, BIO_ASN1_BUF_CTX *ctx, | - | ||||||||||||||||||||||||||||||
58 | asn1_ps_func *setup, asn1_bio_state_t ex_state, | - | ||||||||||||||||||||||||||||||
59 | asn1_bio_state_t other_state); | - | ||||||||||||||||||||||||||||||
60 | - | |||||||||||||||||||||||||||||||
61 | static const BIO_METHOD methods_asn1 = { | - | ||||||||||||||||||||||||||||||
62 | .type = (22|0x0200), | - | ||||||||||||||||||||||||||||||
63 | .name = "asn1", | - | ||||||||||||||||||||||||||||||
64 | .bwrite = asn1_bio_write, | - | ||||||||||||||||||||||||||||||
65 | .bread = asn1_bio_read, | - | ||||||||||||||||||||||||||||||
66 | .bputs = asn1_bio_puts, | - | ||||||||||||||||||||||||||||||
67 | .bgets = asn1_bio_gets, | - | ||||||||||||||||||||||||||||||
68 | .ctrl = asn1_bio_ctrl, | - | ||||||||||||||||||||||||||||||
69 | .create = asn1_bio_new, | - | ||||||||||||||||||||||||||||||
70 | .destroy = asn1_bio_free, | - | ||||||||||||||||||||||||||||||
71 | .callback_ctrl = asn1_bio_callback_ctrl | - | ||||||||||||||||||||||||||||||
72 | }; | - | ||||||||||||||||||||||||||||||
73 | - | |||||||||||||||||||||||||||||||
74 | const BIO_METHOD * | - | ||||||||||||||||||||||||||||||
75 | BIO_f_asn1(void) | - | ||||||||||||||||||||||||||||||
76 | { | - | ||||||||||||||||||||||||||||||
77 | return never executed: (&methods_asn1);return (&methods_asn1); never executed: return (&methods_asn1); | 0 | ||||||||||||||||||||||||||||||
78 | } | - | ||||||||||||||||||||||||||||||
79 | - | |||||||||||||||||||||||||||||||
80 | static int | - | ||||||||||||||||||||||||||||||
81 | asn1_bio_new(BIO *b) | - | ||||||||||||||||||||||||||||||
82 | { | - | ||||||||||||||||||||||||||||||
83 | BIO_ASN1_BUF_CTX *ctx; | - | ||||||||||||||||||||||||||||||
84 | ctx = malloc(sizeof(BIO_ASN1_BUF_CTX)); | - | ||||||||||||||||||||||||||||||
85 | if (!ctx
| 0 | ||||||||||||||||||||||||||||||
86 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
87 | if (!asn1_bio_init(ctx, 20)
| 0 | ||||||||||||||||||||||||||||||
88 | free(ctx); | - | ||||||||||||||||||||||||||||||
89 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
90 | } | - | ||||||||||||||||||||||||||||||
91 | b->init = 1; | - | ||||||||||||||||||||||||||||||
92 | b->ptr = (char *)ctx; | - | ||||||||||||||||||||||||||||||
93 | b->flags = 0; | - | ||||||||||||||||||||||||||||||
94 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||||||||
95 | } | - | ||||||||||||||||||||||||||||||
96 | - | |||||||||||||||||||||||||||||||
97 | static int | - | ||||||||||||||||||||||||||||||
98 | asn1_bio_init(BIO_ASN1_BUF_CTX *ctx, int size) | - | ||||||||||||||||||||||||||||||
99 | { | - | ||||||||||||||||||||||||||||||
100 | ctx->buf = malloc(size); | - | ||||||||||||||||||||||||||||||
101 | if (!ctx->buf
| 0 | ||||||||||||||||||||||||||||||
102 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
103 | ctx->bufsize = size; | - | ||||||||||||||||||||||||||||||
104 | ctx->bufpos = 0; | - | ||||||||||||||||||||||||||||||
105 | ctx->buflen = 0; | - | ||||||||||||||||||||||||||||||
106 | ctx->copylen = 0; | - | ||||||||||||||||||||||||||||||
107 | ctx->asn1_class = 0x00; | - | ||||||||||||||||||||||||||||||
108 | ctx->asn1_tag = 4; | - | ||||||||||||||||||||||||||||||
109 | ctx->ex_buf = | - | ||||||||||||||||||||||||||||||
110 | ((void *)0) | - | ||||||||||||||||||||||||||||||
111 | ; | - | ||||||||||||||||||||||||||||||
112 | ctx->ex_pos = 0; | - | ||||||||||||||||||||||||||||||
113 | ctx->ex_len = 0; | - | ||||||||||||||||||||||||||||||
114 | ctx->state = ASN1_STATE_START; | - | ||||||||||||||||||||||||||||||
115 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||||||||
116 | } | - | ||||||||||||||||||||||||||||||
117 | - | |||||||||||||||||||||||||||||||
118 | static int | - | ||||||||||||||||||||||||||||||
119 | asn1_bio_free(BIO *b) | - | ||||||||||||||||||||||||||||||
120 | { | - | ||||||||||||||||||||||||||||||
121 | BIO_ASN1_BUF_CTX *ctx; | - | ||||||||||||||||||||||||||||||
122 | - | |||||||||||||||||||||||||||||||
123 | ctx = (BIO_ASN1_BUF_CTX *) b->ptr; | - | ||||||||||||||||||||||||||||||
124 | if (ctx ==
| 0 | ||||||||||||||||||||||||||||||
125 | ((void *)0)
| 0 | ||||||||||||||||||||||||||||||
126 | ) | - | ||||||||||||||||||||||||||||||
127 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
128 | free(ctx->buf); | - | ||||||||||||||||||||||||||||||
129 | free(ctx); | - | ||||||||||||||||||||||||||||||
130 | b->init = 0; | - | ||||||||||||||||||||||||||||||
131 | b->ptr = | - | ||||||||||||||||||||||||||||||
132 | ((void *)0) | - | ||||||||||||||||||||||||||||||
133 | ; | - | ||||||||||||||||||||||||||||||
134 | b->flags = 0; | - | ||||||||||||||||||||||||||||||
135 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||||||||
136 | } | - | ||||||||||||||||||||||||||||||
137 | - | |||||||||||||||||||||||||||||||
138 | static int | - | ||||||||||||||||||||||||||||||
139 | asn1_bio_write(BIO *b, const char *in , int inl) | - | ||||||||||||||||||||||||||||||
140 | { | - | ||||||||||||||||||||||||||||||
141 | BIO_ASN1_BUF_CTX *ctx; | - | ||||||||||||||||||||||||||||||
142 | int wrmax, wrlen, ret, buflen; | - | ||||||||||||||||||||||||||||||
143 | unsigned char *p; | - | ||||||||||||||||||||||||||||||
144 | - | |||||||||||||||||||||||||||||||
145 | if (!in
| 0 | ||||||||||||||||||||||||||||||
146 | ((void *)0)
| 0 | ||||||||||||||||||||||||||||||
147 | )
| 0 | ||||||||||||||||||||||||||||||
148 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
149 | ctx = (BIO_ASN1_BUF_CTX *) b->ptr; | - | ||||||||||||||||||||||||||||||
150 | if (ctx ==
| 0 | ||||||||||||||||||||||||||||||
151 | ((void *)0)
| 0 | ||||||||||||||||||||||||||||||
152 | ) | - | ||||||||||||||||||||||||||||||
153 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
154 | - | |||||||||||||||||||||||||||||||
155 | wrlen = 0; | - | ||||||||||||||||||||||||||||||
156 | ret = -1; | - | ||||||||||||||||||||||||||||||
157 | - | |||||||||||||||||||||||||||||||
158 | for (;;) { | - | ||||||||||||||||||||||||||||||
159 | switch (ctx->state) { | - | ||||||||||||||||||||||||||||||
160 | - | |||||||||||||||||||||||||||||||
161 | - | |||||||||||||||||||||||||||||||
162 | case never executed: ASN1_STATE_START:case ASN1_STATE_START: never executed: case ASN1_STATE_START: | 0 | ||||||||||||||||||||||||||||||
163 | if (!asn1_bio_setup_ex(b, ctx, ctx->prefix,
| 0 | ||||||||||||||||||||||||||||||
164 | ASN1_STATE_PRE_COPY, ASN1_STATE_HEADER)
| 0 | ||||||||||||||||||||||||||||||
165 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
166 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||
167 | - | |||||||||||||||||||||||||||||||
168 | - | |||||||||||||||||||||||||||||||
169 | case never executed: ASN1_STATE_PRE_COPY:case ASN1_STATE_PRE_COPY: never executed: case ASN1_STATE_PRE_COPY: | 0 | ||||||||||||||||||||||||||||||
170 | ret = asn1_bio_flush_ex(b, ctx, ctx->prefix_free, | - | ||||||||||||||||||||||||||||||
171 | ASN1_STATE_HEADER); | - | ||||||||||||||||||||||||||||||
172 | if (ret <= 0
| 0 | ||||||||||||||||||||||||||||||
173 | goto never executed: done;goto done; never executed: goto done; | 0 | ||||||||||||||||||||||||||||||
174 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||
175 | - | |||||||||||||||||||||||||||||||
176 | case never executed: ASN1_STATE_HEADER:case ASN1_STATE_HEADER: never executed: case ASN1_STATE_HEADER: | 0 | ||||||||||||||||||||||||||||||
177 | buflen = ASN1_object_size(0, inl, ctx->asn1_tag) - inl; | - | ||||||||||||||||||||||||||||||
178 | if (buflen <= 0
| 0 | ||||||||||||||||||||||||||||||
179 | return never executed: -1;return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||
180 | ctx->buflen = buflen; | - | ||||||||||||||||||||||||||||||
181 | p = ctx->buf; | - | ||||||||||||||||||||||||||||||
182 | ASN1_put_object(&p, 0, inl, | - | ||||||||||||||||||||||||||||||
183 | ctx->asn1_tag, ctx->asn1_class); | - | ||||||||||||||||||||||||||||||
184 | ctx->copylen = inl; | - | ||||||||||||||||||||||||||||||
185 | ctx->state = ASN1_STATE_HEADER_COPY; | - | ||||||||||||||||||||||||||||||
186 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||
187 | - | |||||||||||||||||||||||||||||||
188 | case never executed: ASN1_STATE_HEADER_COPY:case ASN1_STATE_HEADER_COPY: never executed: case ASN1_STATE_HEADER_COPY: | 0 | ||||||||||||||||||||||||||||||
189 | ret = BIO_write(b->next_bio, | - | ||||||||||||||||||||||||||||||
190 | ctx->buf + ctx->bufpos, ctx->buflen); | - | ||||||||||||||||||||||||||||||
191 | if (ret <= 0
| 0 | ||||||||||||||||||||||||||||||
192 | goto never executed: done;goto done; never executed: goto done; | 0 | ||||||||||||||||||||||||||||||
193 | - | |||||||||||||||||||||||||||||||
194 | ctx->buflen -= ret; | - | ||||||||||||||||||||||||||||||
195 | if (ctx->buflen
| 0 | ||||||||||||||||||||||||||||||
196 | ctx->bufpos += ret; never executed: ctx->bufpos += ret; | 0 | ||||||||||||||||||||||||||||||
197 | else { | - | ||||||||||||||||||||||||||||||
198 | ctx->bufpos = 0; | - | ||||||||||||||||||||||||||||||
199 | ctx->state = ASN1_STATE_DATA_COPY; | - | ||||||||||||||||||||||||||||||
200 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
201 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||
202 | - | |||||||||||||||||||||||||||||||
203 | case never executed: ASN1_STATE_DATA_COPY:case ASN1_STATE_DATA_COPY: never executed: case ASN1_STATE_DATA_COPY: | 0 | ||||||||||||||||||||||||||||||
204 | - | |||||||||||||||||||||||||||||||
205 | if (inl > ctx->copylen
| 0 | ||||||||||||||||||||||||||||||
206 | wrmax = ctx->copylen; never executed: wrmax = ctx->copylen; | 0 | ||||||||||||||||||||||||||||||
207 | else | - | ||||||||||||||||||||||||||||||
208 | wrmax = inl; never executed: wrmax = inl; | 0 | ||||||||||||||||||||||||||||||
209 | ret = BIO_write(b->next_bio, in, wrmax); | - | ||||||||||||||||||||||||||||||
210 | if (ret <= 0
| 0 | ||||||||||||||||||||||||||||||
211 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||
212 | wrlen += ret; | - | ||||||||||||||||||||||||||||||
213 | ctx->copylen -= ret; | - | ||||||||||||||||||||||||||||||
214 | in += ret; | - | ||||||||||||||||||||||||||||||
215 | inl -= ret; | - | ||||||||||||||||||||||||||||||
216 | - | |||||||||||||||||||||||||||||||
217 | if (ctx->copylen == 0
| 0 | ||||||||||||||||||||||||||||||
218 | ctx->state = ASN1_STATE_HEADER; never executed: ctx->state = ASN1_STATE_HEADER; | 0 | ||||||||||||||||||||||||||||||
219 | if (inl == 0
| 0 | ||||||||||||||||||||||||||||||
220 | goto never executed: done;goto done; never executed: goto done; | 0 | ||||||||||||||||||||||||||||||
221 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||
222 | - | |||||||||||||||||||||||||||||||
223 | default never executed: :default: never executed: default: | 0 | ||||||||||||||||||||||||||||||
224 | BIO_clear_flags(b, ((0x01|0x02|0x04)|0x08)); | - | ||||||||||||||||||||||||||||||
225 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
226 | } | - | ||||||||||||||||||||||||||||||
227 | - | |||||||||||||||||||||||||||||||
228 | } | - | ||||||||||||||||||||||||||||||
229 | - | |||||||||||||||||||||||||||||||
230 | done: code before this statement never executed: done: | 0 | ||||||||||||||||||||||||||||||
231 | BIO_clear_flags(b, ((0x01|0x02|0x04)|0x08)); | - | ||||||||||||||||||||||||||||||
232 | BIO_copy_next_retry(b); | - | ||||||||||||||||||||||||||||||
233 | - | |||||||||||||||||||||||||||||||
234 | return never executed: (return (wrlen > 0) ? wrlen : ret;
never executed: return (wrlen > 0) ? wrlen : ret; | 0 | ||||||||||||||||||||||||||||||
235 | } | - | ||||||||||||||||||||||||||||||
236 | - | |||||||||||||||||||||||||||||||
237 | static int | - | ||||||||||||||||||||||||||||||
238 | asn1_bio_flush_ex(BIO *b, BIO_ASN1_BUF_CTX *ctx, asn1_ps_func *cleanup, | - | ||||||||||||||||||||||||||||||
239 | asn1_bio_state_t next) | - | ||||||||||||||||||||||||||||||
240 | { | - | ||||||||||||||||||||||||||||||
241 | int ret; | - | ||||||||||||||||||||||||||||||
242 | - | |||||||||||||||||||||||||||||||
243 | if (ctx->ex_len <= 0
| 0 | ||||||||||||||||||||||||||||||
244 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||||||||
245 | for (;;) { | - | ||||||||||||||||||||||||||||||
246 | ret = BIO_write(b->next_bio, ctx->ex_buf + ctx->ex_pos, | - | ||||||||||||||||||||||||||||||
247 | ctx->ex_len); | - | ||||||||||||||||||||||||||||||
248 | if (ret <= 0
| 0 | ||||||||||||||||||||||||||||||
249 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||
250 | ctx->ex_len -= ret; | - | ||||||||||||||||||||||||||||||
251 | if (ctx->ex_len > 0
| 0 | ||||||||||||||||||||||||||||||
252 | ctx->ex_pos += ret; never executed: ctx->ex_pos += ret; | 0 | ||||||||||||||||||||||||||||||
253 | else { | - | ||||||||||||||||||||||||||||||
254 | if (cleanup
| 0 | ||||||||||||||||||||||||||||||
255 | cleanup(b, &ctx->ex_buf, &ctx->ex_len, never executed: cleanup(b, &ctx->ex_buf, &ctx->ex_len, &ctx->ex_arg); | 0 | ||||||||||||||||||||||||||||||
256 | &ctx->ex_arg); never executed: cleanup(b, &ctx->ex_buf, &ctx->ex_len, &ctx->ex_arg); | 0 | ||||||||||||||||||||||||||||||
257 | ctx->state = next; | - | ||||||||||||||||||||||||||||||
258 | ctx->ex_pos = 0; | - | ||||||||||||||||||||||||||||||
259 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||
260 | } | - | ||||||||||||||||||||||||||||||
261 | } | - | ||||||||||||||||||||||||||||||
262 | return never executed: ret;return ret; never executed: return ret; | 0 | ||||||||||||||||||||||||||||||
263 | } | - | ||||||||||||||||||||||||||||||
264 | - | |||||||||||||||||||||||||||||||
265 | static int | - | ||||||||||||||||||||||||||||||
266 | asn1_bio_setup_ex(BIO *b, BIO_ASN1_BUF_CTX *ctx, asn1_ps_func *setup, | - | ||||||||||||||||||||||||||||||
267 | asn1_bio_state_t ex_state, asn1_bio_state_t other_state) | - | ||||||||||||||||||||||||||||||
268 | { | - | ||||||||||||||||||||||||||||||
269 | if (setup
| 0 | ||||||||||||||||||||||||||||||
270 | BIO_clear_flags(b, ((0x01|0x02|0x04)|0x08)); | - | ||||||||||||||||||||||||||||||
271 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
272 | } | - | ||||||||||||||||||||||||||||||
273 | if (ctx->ex_len > 0
| 0 | ||||||||||||||||||||||||||||||
274 | ctx->state = ex_state; never executed: ctx->state = ex_state; | 0 | ||||||||||||||||||||||||||||||
275 | else | - | ||||||||||||||||||||||||||||||
276 | ctx->state = other_state; never executed: ctx->state = other_state; | 0 | ||||||||||||||||||||||||||||||
277 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||||||||
278 | } | - | ||||||||||||||||||||||||||||||
279 | - | |||||||||||||||||||||||||||||||
280 | static int | - | ||||||||||||||||||||||||||||||
281 | asn1_bio_read(BIO *b, char *in , int inl) | - | ||||||||||||||||||||||||||||||
282 | { | - | ||||||||||||||||||||||||||||||
283 | if (!b->next_bio
| 0 | ||||||||||||||||||||||||||||||
284 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
285 | return never executed: BIO_read(b->next_bio, in , inl);return BIO_read(b->next_bio, in , inl); never executed: return BIO_read(b->next_bio, in , inl); | 0 | ||||||||||||||||||||||||||||||
286 | } | - | ||||||||||||||||||||||||||||||
287 | - | |||||||||||||||||||||||||||||||
288 | static int | - | ||||||||||||||||||||||||||||||
289 | asn1_bio_puts(BIO *b, const char *str) | - | ||||||||||||||||||||||||||||||
290 | { | - | ||||||||||||||||||||||||||||||
291 | return never executed: asn1_bio_write(b, str, strlen(str));return asn1_bio_write(b, str, strlen(str)); never executed: return asn1_bio_write(b, str, strlen(str)); | 0 | ||||||||||||||||||||||||||||||
292 | } | - | ||||||||||||||||||||||||||||||
293 | - | |||||||||||||||||||||||||||||||
294 | static int | - | ||||||||||||||||||||||||||||||
295 | asn1_bio_gets(BIO *b, char *str, int size) | - | ||||||||||||||||||||||||||||||
296 | { | - | ||||||||||||||||||||||||||||||
297 | if (!b->next_bio
| 0 | ||||||||||||||||||||||||||||||
298 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
299 | return never executed: BIO_gets(b->next_bio, str , size);return BIO_gets(b->next_bio, str , size); never executed: return BIO_gets(b->next_bio, str , size); | 0 | ||||||||||||||||||||||||||||||
300 | } | - | ||||||||||||||||||||||||||||||
301 | - | |||||||||||||||||||||||||||||||
302 | static long | - | ||||||||||||||||||||||||||||||
303 | asn1_bio_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp) | - | ||||||||||||||||||||||||||||||
304 | { | - | ||||||||||||||||||||||||||||||
305 | if (b->next_bio ==
| 0 | ||||||||||||||||||||||||||||||
306 | ((void *)0)
| 0 | ||||||||||||||||||||||||||||||
307 | ) | - | ||||||||||||||||||||||||||||||
308 | return never executed: (0);return (0); never executed: return (0); | 0 | ||||||||||||||||||||||||||||||
309 | return never executed: BIO_callback_ctrl(b->next_bio, cmd, fp);return BIO_callback_ctrl(b->next_bio, cmd, fp); never executed: return BIO_callback_ctrl(b->next_bio, cmd, fp); | 0 | ||||||||||||||||||||||||||||||
310 | } | - | ||||||||||||||||||||||||||||||
311 | - | |||||||||||||||||||||||||||||||
312 | static long | - | ||||||||||||||||||||||||||||||
313 | asn1_bio_ctrl(BIO *b, int cmd, long arg1, void *arg2) | - | ||||||||||||||||||||||||||||||
314 | { | - | ||||||||||||||||||||||||||||||
315 | BIO_ASN1_BUF_CTX *ctx; | - | ||||||||||||||||||||||||||||||
316 | BIO_ASN1_EX_FUNCS *ex_func; | - | ||||||||||||||||||||||||||||||
317 | long ret = 1; | - | ||||||||||||||||||||||||||||||
318 | - | |||||||||||||||||||||||||||||||
319 | ctx = (BIO_ASN1_BUF_CTX *) b->ptr; | - | ||||||||||||||||||||||||||||||
320 | if (ctx ==
| 0 | ||||||||||||||||||||||||||||||
321 | ((void *)0)
| 0 | ||||||||||||||||||||||||||||||
322 | ) | - | ||||||||||||||||||||||||||||||
323 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
324 | switch (cmd) { | - | ||||||||||||||||||||||||||||||
325 | - | |||||||||||||||||||||||||||||||
326 | case never executed: 149:case 149: never executed: case 149: | 0 | ||||||||||||||||||||||||||||||
327 | ex_func = arg2; | - | ||||||||||||||||||||||||||||||
328 | ctx->prefix = ex_func->ex_func; | - | ||||||||||||||||||||||||||||||
329 | ctx->prefix_free = ex_func->ex_free_func; | - | ||||||||||||||||||||||||||||||
330 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||
331 | - | |||||||||||||||||||||||||||||||
332 | case never executed: 150:case 150: never executed: case 150: | 0 | ||||||||||||||||||||||||||||||
333 | ex_func = arg2; | - | ||||||||||||||||||||||||||||||
334 | ex_func->ex_func = ctx->prefix; | - | ||||||||||||||||||||||||||||||
335 | ex_func->ex_free_func = ctx->prefix_free; | - | ||||||||||||||||||||||||||||||
336 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||
337 | - | |||||||||||||||||||||||||||||||
338 | case never executed: 151:case 151: never executed: case 151: | 0 | ||||||||||||||||||||||||||||||
339 | ex_func = arg2; | - | ||||||||||||||||||||||||||||||
340 | ctx->suffix = ex_func->ex_func; | - | ||||||||||||||||||||||||||||||
341 | ctx->suffix_free = ex_func->ex_free_func; | - | ||||||||||||||||||||||||||||||
342 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||
343 | - | |||||||||||||||||||||||||||||||
344 | case never executed: 152:case 152: never executed: case 152: | 0 | ||||||||||||||||||||||||||||||
345 | ex_func = arg2; | - | ||||||||||||||||||||||||||||||
346 | ex_func->ex_func = ctx->suffix; | - | ||||||||||||||||||||||||||||||
347 | ex_func->ex_free_func = ctx->suffix_free; | - | ||||||||||||||||||||||||||||||
348 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||
349 | - | |||||||||||||||||||||||||||||||
350 | case never executed: 153:case 153: never executed: case 153: | 0 | ||||||||||||||||||||||||||||||
351 | ctx->ex_arg = arg2; | - | ||||||||||||||||||||||||||||||
352 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||
353 | - | |||||||||||||||||||||||||||||||
354 | case never executed: 154:case 154: never executed: case 154: | 0 | ||||||||||||||||||||||||||||||
355 | *(void **)arg2 = ctx->ex_arg; | - | ||||||||||||||||||||||||||||||
356 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||
357 | - | |||||||||||||||||||||||||||||||
358 | case never executed: 11:case 11: never executed: case 11: | 0 | ||||||||||||||||||||||||||||||
359 | if (!b->next_bio
| 0 | ||||||||||||||||||||||||||||||
360 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
361 | - | |||||||||||||||||||||||||||||||
362 | - | |||||||||||||||||||||||||||||||
363 | if (ctx->state == ASN1_STATE_HEADER
| 0 | ||||||||||||||||||||||||||||||
364 | if (!asn1_bio_setup_ex(b, ctx, ctx->suffix,
| 0 | ||||||||||||||||||||||||||||||
365 | ASN1_STATE_POST_COPY, ASN1_STATE_DONE)
| 0 | ||||||||||||||||||||||||||||||
366 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
367 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
368 | - | |||||||||||||||||||||||||||||||
369 | if (ctx->state == ASN1_STATE_POST_COPY
| 0 | ||||||||||||||||||||||||||||||
370 | ret = asn1_bio_flush_ex(b, ctx, ctx->suffix_free, | - | ||||||||||||||||||||||||||||||
371 | ASN1_STATE_DONE); | - | ||||||||||||||||||||||||||||||
372 | if (ret <= 0
| 0 | ||||||||||||||||||||||||||||||
373 | return never executed: ret;return ret; never executed: return ret; | 0 | ||||||||||||||||||||||||||||||
374 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
375 | - | |||||||||||||||||||||||||||||||
376 | if (ctx->state == ASN1_STATE_DONE
| 0 | ||||||||||||||||||||||||||||||
377 | return never executed: BIO_ctrl(b->next_bio, cmd, arg1, arg2);return BIO_ctrl(b->next_bio, cmd, arg1, arg2); never executed: return BIO_ctrl(b->next_bio, cmd, arg1, arg2); | 0 | ||||||||||||||||||||||||||||||
378 | else { | - | ||||||||||||||||||||||||||||||
379 | BIO_clear_flags(b, ((0x01|0x02|0x04)|0x08)); | - | ||||||||||||||||||||||||||||||
380 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
381 | } | - | ||||||||||||||||||||||||||||||
382 | break; dead code: break; | - | ||||||||||||||||||||||||||||||
383 | - | |||||||||||||||||||||||||||||||
384 | - | |||||||||||||||||||||||||||||||
385 | default never executed: :default: never executed: default: | 0 | ||||||||||||||||||||||||||||||
386 | if (!b->next_bio
| 0 | ||||||||||||||||||||||||||||||
387 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||
388 | return never executed: BIO_ctrl(b->next_bio, cmd, arg1, arg2);return BIO_ctrl(b->next_bio, cmd, arg1, arg2); never executed: return BIO_ctrl(b->next_bio, cmd, arg1, arg2); | 0 | ||||||||||||||||||||||||||||||
389 | - | |||||||||||||||||||||||||||||||
390 | } | - | ||||||||||||||||||||||||||||||
391 | - | |||||||||||||||||||||||||||||||
392 | return never executed: ret;return ret; never executed: return ret; | 0 | ||||||||||||||||||||||||||||||
393 | } | - | ||||||||||||||||||||||||||||||
394 | - | |||||||||||||||||||||||||||||||
395 | static int | - | ||||||||||||||||||||||||||||||
396 | asn1_bio_set_ex(BIO *b, int cmd, asn1_ps_func *ex_func, asn1_ps_func | - | ||||||||||||||||||||||||||||||
397 | *ex_free_func) | - | ||||||||||||||||||||||||||||||
398 | { | - | ||||||||||||||||||||||||||||||
399 | BIO_ASN1_EX_FUNCS extmp; | - | ||||||||||||||||||||||||||||||
400 | - | |||||||||||||||||||||||||||||||
401 | extmp.ex_func = ex_func; | - | ||||||||||||||||||||||||||||||
402 | extmp.ex_free_func = ex_free_func; | - | ||||||||||||||||||||||||||||||
403 | return never executed: BIO_ctrl(b, cmd, 0, &extmp);return BIO_ctrl(b, cmd, 0, &extmp); never executed: return BIO_ctrl(b, cmd, 0, &extmp); | 0 | ||||||||||||||||||||||||||||||
404 | } | - | ||||||||||||||||||||||||||||||
405 | - | |||||||||||||||||||||||||||||||
406 | static int | - | ||||||||||||||||||||||||||||||
407 | asn1_bio_get_ex(BIO *b, int cmd, asn1_ps_func **ex_func, | - | ||||||||||||||||||||||||||||||
408 | asn1_ps_func **ex_free_func) | - | ||||||||||||||||||||||||||||||
409 | { | - | ||||||||||||||||||||||||||||||
410 | BIO_ASN1_EX_FUNCS extmp; | - | ||||||||||||||||||||||||||||||
411 | int ret; | - | ||||||||||||||||||||||||||||||
412 | - | |||||||||||||||||||||||||||||||
413 | ret = BIO_ctrl(b, cmd, 0, &extmp); | - | ||||||||||||||||||||||||||||||
414 | if (ret > 0
| 0 | ||||||||||||||||||||||||||||||
415 | *ex_func = extmp.ex_func; | - | ||||||||||||||||||||||||||||||
416 | *ex_free_func = extmp.ex_free_func; | - | ||||||||||||||||||||||||||||||
417 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
418 | return never executed: ret;return ret; never executed: return ret; | 0 | ||||||||||||||||||||||||||||||
419 | } | - | ||||||||||||||||||||||||||||||
420 | - | |||||||||||||||||||||||||||||||
421 | int | - | ||||||||||||||||||||||||||||||
422 | BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix, asn1_ps_func *prefix_free) | - | ||||||||||||||||||||||||||||||
423 | { | - | ||||||||||||||||||||||||||||||
424 | return never executed: asn1_bio_set_ex(b, 149, prefix, prefix_free);return asn1_bio_set_ex(b, 149, prefix, prefix_free); never executed: return asn1_bio_set_ex(b, 149, prefix, prefix_free); | 0 | ||||||||||||||||||||||||||||||
425 | } | - | ||||||||||||||||||||||||||||||
426 | - | |||||||||||||||||||||||||||||||
427 | int | - | ||||||||||||||||||||||||||||||
428 | BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix, asn1_ps_func **pprefix_free) | - | ||||||||||||||||||||||||||||||
429 | { | - | ||||||||||||||||||||||||||||||
430 | return never executed: asn1_bio_get_ex(b, 150, pprefix, pprefix_free);return asn1_bio_get_ex(b, 150, pprefix, pprefix_free); never executed: return asn1_bio_get_ex(b, 150, pprefix, pprefix_free); | 0 | ||||||||||||||||||||||||||||||
431 | } | - | ||||||||||||||||||||||||||||||
432 | - | |||||||||||||||||||||||||||||||
433 | int | - | ||||||||||||||||||||||||||||||
434 | BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix, asn1_ps_func *suffix_free) | - | ||||||||||||||||||||||||||||||
435 | { | - | ||||||||||||||||||||||||||||||
436 | return never executed: asn1_bio_set_ex(b, 151, suffix, suffix_free);return asn1_bio_set_ex(b, 151, suffix, suffix_free); never executed: return asn1_bio_set_ex(b, 151, suffix, suffix_free); | 0 | ||||||||||||||||||||||||||||||
437 | } | - | ||||||||||||||||||||||||||||||
438 | - | |||||||||||||||||||||||||||||||
439 | int | - | ||||||||||||||||||||||||||||||
440 | BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix, asn1_ps_func **psuffix_free) | - | ||||||||||||||||||||||||||||||
441 | { | - | ||||||||||||||||||||||||||||||
442 | return never executed: asn1_bio_get_ex(b, 152, psuffix, psuffix_free);return asn1_bio_get_ex(b, 152, psuffix, psuffix_free); never executed: return asn1_bio_get_ex(b, 152, psuffix, psuffix_free); | 0 | ||||||||||||||||||||||||||||||
443 | } | - | ||||||||||||||||||||||||||||||
Switch to Source code | Preprocessed file |