OpenCoverage

bss_conn.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/bio/bss_conn.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
2 * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.-
3 *-
4 * Licensed under the OpenSSL license (the "License"). You may not use-
5 * this file except in compliance with the License. You can obtain a copy-
6 * in the file LICENSE in the source distribution or at-
7 * https://www.openssl.org/source/license.html-
8 */-
9-
10#include <stdio.h>-
11#include <errno.h>-
12-
13#include "bio_lcl.h"-
14-
15#ifndef OPENSSL_NO_SOCK-
16-
17typedef struct bio_connect_st {-
18 int state;-
19 int connect_family;-
20 char *param_hostname;-
21 char *param_service;-
22 int connect_mode;-
23-
24 BIO_ADDRINFO *addr_first;-
25 const BIO_ADDRINFO *addr_iter;-
26 /*-
27 * int socket; this will be kept in bio->num so that it is compatible-
28 * with the bss_sock bio-
29 */-
30 /*-
31 * called when the connection is initially made callback(BIO,state,ret);-
32 * The callback should return 'ret'. state is for compatibility with the-
33 * ssl info_callback-
34 */-
35 BIO_info_cb *info_callback;-
36} BIO_CONNECT;-
37-
38static int conn_write(BIO *h, const char *buf, int num);-
39static int conn_read(BIO *h, char *buf, int size);-
40static int conn_puts(BIO *h, const char *str);-
41static long conn_ctrl(BIO *h, int cmd, long arg1, void *arg2);-
42static int conn_new(BIO *h);-
43static int conn_free(BIO *data);-
44static long conn_callback_ctrl(BIO *h, int cmd, BIO_info_cb *);-
45-
46static int conn_state(BIO *b, BIO_CONNECT *c);-
47static void conn_close_socket(BIO *data);-
48BIO_CONNECT *BIO_CONNECT_new(void);-
49void BIO_CONNECT_free(BIO_CONNECT *a);-
50-
51#define BIO_CONN_S_BEFORE 1-
52#define BIO_CONN_S_GET_ADDR 2-
53#define BIO_CONN_S_CREATE_SOCKET 3-
54#define BIO_CONN_S_CONNECT 4-
55#define BIO_CONN_S_OK 5-
56#define BIO_CONN_S_BLOCKED_CONNECT 6-
57-
58static const BIO_METHOD methods_connectp = {-
59 BIO_TYPE_CONNECT,-
60 "socket connect",-
61 /* TODO: Convert to new style write function */-
62 bwrite_conv,-
63 conn_write,-
64 /* TODO: Convert to new style read function */-
65 bread_conv,-
66 conn_read,-
67 conn_puts,-
68 NULL, /* conn_gets, */-
69 conn_ctrl,-
70 conn_new,-
71 conn_free,-
72 conn_callback_ctrl,-
73};-
74-
75static int conn_state(BIO *b, BIO_CONNECT *c)-
76{-
77 int ret = -1, i;-
78 BIO_info_cb *cb = NULL;-
79-
80 if (c->info_callback != NULL)
c->info_callba...!= ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-4
81 cb = c->info_callback;
never executed: cb = c->info_callback;
0
82-
83 for (;;) {-
84 switch (c->state) {-
85 case BIO_CONN_S_BEFORE:
executed 2 times by 1 test: case 1:
Executed by:
  • libcrypto.so.1.1
2
86 if (c->param_hostname == NULL && c->param_service == NULL) {
c->param_hostn...== ((void *)0)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
c->param_servi...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
87 BIOerr(BIO_F_CONN_STATE, BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED);-
88 ERR_add_error_data(4,-
89 "hostname=", c->param_hostname,-
90 " service=", c->param_service);-
91 goto exit_loop;
never executed: goto exit_loop;
0
92 }-
93 c->state = BIO_CONN_S_GET_ADDR;-
94 break;
executed 2 times by 1 test: break;
Executed by:
  • libcrypto.so.1.1
2
95-
96 case BIO_CONN_S_GET_ADDR:
executed 2 times by 1 test: case 2:
Executed by:
  • libcrypto.so.1.1
2
97 {-
98 int family = AF_UNSPEC;-
99 switch (c->connect_family) {-
100 case BIO_FAMILY_IPV6:
executed 1 time by 1 test: case 6:
Executed by:
  • libcrypto.so.1.1
1
101 if (1) { /* This is a trick we use to avoid bit rot.-
102 * at least the "else" part will always be-
103 * compiled.-
104 */-
105#ifdef AF_INET6-
106 family = AF_INET6;-
107 } else {
executed 1 time by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
dead code: { ERR_put_error(32,(115),(145),__FILE__,109); goto exit_loop; }
-
108#endif
dead code: { ERR_put_error(32,(115),(145),__FILE__,109); goto exit_loop; }
-
109 BIOerr(BIO_F_CONN_STATE, BIO_R_UNAVAILABLE_IP_FAMILY);
dead code: { ERR_put_error(32,(115),(145),__FILE__,109); goto exit_loop; }
-
110 goto exit_loop;
dead code: { ERR_put_error(32,(115),(145),__FILE__,109); goto exit_loop; }
-
111 }
dead code: { ERR_put_error(32,(115),(145),__FILE__,109); goto exit_loop; }
-
112 break;
executed 1 time by 1 test: break;
Executed by:
  • libcrypto.so.1.1
1
113 case BIO_FAMILY_IPV4:
executed 1 time by 1 test: case 4:
Executed by:
  • libcrypto.so.1.1
1
114 family = AF_INET;-
115 break;
executed 1 time by 1 test: break;
Executed by:
  • libcrypto.so.1.1
1
116 case BIO_FAMILY_IPANY:
never executed: case 256:
0
117 family = AF_UNSPEC;-
118 break;
never executed: break;
0
119 default:
never executed: default:
0
120 BIOerr(BIO_F_CONN_STATE, BIO_R_UNSUPPORTED_IP_FAMILY);-
121 goto exit_loop;
never executed: goto exit_loop;
0
122 }-
123 if (BIO_lookup(c->param_hostname, c->param_service,
BIO_lookup(c->...dr_first) == 0Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
124 BIO_LOOKUP_CLIENT,
BIO_lookup(c->...dr_first) == 0Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
125 family, SOCK_STREAM, &c->addr_first) == 0)
BIO_lookup(c->...dr_first) == 0Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
126 goto exit_loop;
never executed: goto exit_loop;
0
127 }-
128 if (c->addr_first == NULL) {
c->addr_first == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
129 BIOerr(BIO_F_CONN_STATE, BIO_R_LOOKUP_RETURNED_NOTHING);-
130 goto exit_loop;
never executed: goto exit_loop;
0
131 }-
132 c->addr_iter = c->addr_first;-
133 c->state = BIO_CONN_S_CREATE_SOCKET;-
134 break;
executed 2 times by 1 test: break;
Executed by:
  • libcrypto.so.1.1
2
135-
136 case BIO_CONN_S_CREATE_SOCKET:
executed 2 times by 1 test: case 3:
Executed by:
  • libcrypto.so.1.1
2
137 ret = BIO_socket(BIO_ADDRINFO_family(c->addr_iter),-
138 BIO_ADDRINFO_socktype(c->addr_iter),-
139 BIO_ADDRINFO_protocol(c->addr_iter), 0);-
140 if (ret == (int)INVALID_SOCKET) {
ret == (int)(-1)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
141 SYSerr(SYS_F_SOCKET, get_last_socket_error());-
142 ERR_add_error_data(4,-
143 "hostname=", c->param_hostname,-
144 " service=", c->param_service);-
145 BIOerr(BIO_F_CONN_STATE, BIO_R_UNABLE_TO_CREATE_SOCKET);-
146 goto exit_loop;
never executed: goto exit_loop;
0
147 }-
148 b->num = ret;-
149 c->state = BIO_CONN_S_CONNECT;-
150 break;
executed 2 times by 1 test: break;
Executed by:
  • libcrypto.so.1.1
2
151-
152 case BIO_CONN_S_CONNECT:
executed 2 times by 1 test: case 4:
Executed by:
  • libcrypto.so.1.1
2
153 BIO_clear_retry_flags(b);-
154 ret = BIO_connect(b->num, BIO_ADDRINFO_address(c->addr_iter),-
155 BIO_SOCK_KEEPALIVE | c->connect_mode);-
156 b->retry_reason = 0;-
157 if (ret == 0) {
ret == 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-2
158 if (BIO_sock_should_retry(ret)) {
BIO_sock_should_retry(ret)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-2
159 BIO_set_retry_special(b);-
160 c->state = BIO_CONN_S_BLOCKED_CONNECT;-
161 b->retry_reason = BIO_RR_CONNECT;-
162 ERR_clear_error();-
163 } else if ((c->addr_iter = BIO_ADDRINFO_next(c->addr_iter))
executed 2 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
(c->addr_iter ...!= ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0-2
164 != NULL) {
(c->addr_iter ...!= ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
165 /*-
166 * if there are more addresses to try, do that first-
167 */-
168 BIO_closesocket(b->num);-
169 c->state = BIO_CONN_S_CREATE_SOCKET;-
170 ERR_clear_error();-
171 break;
never executed: break;
0
172 } else {-
173 SYSerr(SYS_F_CONNECT, get_last_socket_error());-
174 ERR_add_error_data(4,-
175 "hostname=", c->param_hostname,-
176 " service=", c->param_service);-
177 BIOerr(BIO_F_CONN_STATE, BIO_R_CONNECT_ERROR);-
178 }
never executed: end of block
0
179 goto exit_loop;
executed 2 times by 1 test: goto exit_loop;
Executed by:
  • libcrypto.so.1.1
2
180 } else {-
181 c->state = BIO_CONN_S_OK;-
182 }
never executed: end of block
0
183 break;
never executed: break;
0
184-
185 case BIO_CONN_S_BLOCKED_CONNECT:
executed 2 times by 1 test: case 6:
Executed by:
  • libcrypto.so.1.1
2
186 i = BIO_sock_error(b->num);-
187 if (i) {
iDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
188 BIO_clear_retry_flags(b);-
189 SYSerr(SYS_F_CONNECT, i);-
190 ERR_add_error_data(4,-
191 "hostname=", c->param_hostname,-
192 " service=", c->param_service);-
193 BIOerr(BIO_F_CONN_STATE, BIO_R_NBIO_CONNECT_ERROR);-
194 ret = 0;-
195 goto exit_loop;
never executed: goto exit_loop;
0
196 } else-
197 c->state = BIO_CONN_S_OK;
executed 2 times by 1 test: c->state = 5;
Executed by:
  • libcrypto.so.1.1
2
198 break;
executed 2 times by 1 test: break;
Executed by:
  • libcrypto.so.1.1
2
199-
200 case BIO_CONN_S_OK:
executed 2 times by 1 test: case 5:
Executed by:
  • libcrypto.so.1.1
2
201 ret = 1;-
202 goto exit_loop;
executed 2 times by 1 test: goto exit_loop;
Executed by:
  • libcrypto.so.1.1
2
203 default:
never executed: default:
0
204 /* abort(); */-
205 goto exit_loop;
never executed: goto exit_loop;
0
206 }-
207-
208 if (cb != NULL) {
cb != ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-8
209 if ((ret = cb((BIO *)b, c->state, ret)) == 0)
(ret = cb((BIO...te, ret)) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
210 goto end;
never executed: goto end;
0
211 }
never executed: end of block
0
212 }
executed 8 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
8
213-
214 /* Loop does not exit */-
215 exit_loop:
code before this statement never executed: exit_loop:
0
216 if (cb != NULL)
cb != ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-4
217 ret = cb((BIO *)b, c->state, ret);
never executed: ret = cb((BIO *)b, c->state, ret);
0
218 end:
code before this statement executed 4 times by 1 test: end:
Executed by:
  • libcrypto.so.1.1
4
219 return ret;
executed 4 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
4
220}-
221-
222BIO_CONNECT *BIO_CONNECT_new(void)-
223{-
224 BIO_CONNECT *ret;-
225-
226 if ((ret = OPENSSL_zalloc(sizeof(*ret))) == NULL) {
(ret = CRYPTO_...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
227 BIOerr(BIO_F_BIO_CONNECT_NEW, ERR_R_MALLOC_FAILURE);-
228 return NULL;
never executed: return ((void *)0) ;
0
229 }-
230 ret->state = BIO_CONN_S_BEFORE;-
231 ret->connect_family = BIO_FAMILY_IPANY;-
232 return ret;
executed 2 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
2
233}-
234-
235void BIO_CONNECT_free(BIO_CONNECT *a)-
236{-
237 if (a == NULL)
a == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
238 return;
never executed: return;
0
239 OPENSSL_free(a->param_hostname);-
240 OPENSSL_free(a->param_service);-
241 BIO_ADDRINFO_free(a->addr_first);-
242 OPENSSL_free(a);-
243}
executed 2 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
2
244-
245const BIO_METHOD *BIO_s_connect(void)-
246{-
247 return &methods_connectp;
executed 2 times by 1 test: return &methods_connectp;
Executed by:
  • libcrypto.so.1.1
2
248}-
249-
250static int conn_new(BIO *bi)-
251{-
252 bi->init = 0;-
253 bi->num = (int)INVALID_SOCKET;-
254 bi->flags = 0;-
255 if ((bi->ptr = (char *)BIO_CONNECT_new()) == NULL)
(bi->ptr = (ch...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
256 return 0;
never executed: return 0;
0
257 else-
258 return 1;
executed 2 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
2
259}-
260-
261static void conn_close_socket(BIO *bio)-
262{-
263 BIO_CONNECT *c;-
264-
265 c = (BIO_CONNECT *)bio->ptr;-
266 if (bio->num != (int)INVALID_SOCKET) {
bio->num != (int)(-1)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-2
267 /* Only do a shutdown if things were established */-
268 if (c->state == BIO_CONN_S_OK)
c->state == 5Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-2
269 shutdown(bio->num, 2);
executed 2 times by 1 test: shutdown(bio->num, 2);
Executed by:
  • libcrypto.so.1.1
2
270 BIO_closesocket(bio->num);-
271 bio->num = (int)INVALID_SOCKET;-
272 }
executed 2 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
2
273}
executed 2 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
2
274-
275static int conn_free(BIO *a)-
276{-
277 BIO_CONNECT *data;-
278-
279 if (a == NULL)
a == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
280 return 0;
never executed: return 0;
0
281 data = (BIO_CONNECT *)a->ptr;-
282-
283 if (a->shutdown) {
a->shutdownDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-2
284 conn_close_socket(a);-
285 BIO_CONNECT_free(data);-
286 a->ptr = NULL;-
287 a->flags = 0;-
288 a->init = 0;-
289 }
executed 2 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
2
290 return 1;
executed 2 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
2
291}-
292-
293static int conn_read(BIO *b, char *out, int outl)-
294{-
295 int ret = 0;-
296 BIO_CONNECT *data;-
297-
298 data = (BIO_CONNECT *)b->ptr;-
299 if (data->state != BIO_CONN_S_OK) {
data->state != 5Description
TRUEnever evaluated
FALSEevaluated 6934 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-6934
300 ret = conn_state(b, data);-
301 if (ret <= 0)
ret <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
302 return ret;
never executed: return ret;
0
303 }
never executed: end of block
0
304-
305 if (out != NULL) {
out != ((void *)0)Description
TRUEevaluated 6934 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-6934
306 clear_socket_error();-
307 ret = readsocket(b->num, out, outl);-
308 BIO_clear_retry_flags(b);-
309 if (ret <= 0) {
ret <= 0Description
TRUEevaluated 6898 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 36 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
36-6898
310 if (BIO_sock_should_retry(ret))
BIO_sock_should_retry(ret)Description
TRUEevaluated 6898 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-6898
311 BIO_set_retry_read(b);
executed 6898 times by 1 test: BIO_set_flags(b, (0x01|0x08));
Executed by:
  • libcrypto.so.1.1
6898
312 }
executed 6898 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
6898
313 }
executed 6934 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
6934
314 return ret;
executed 6934 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
6934
315}-
316-
317static int conn_write(BIO *b, const char *in, int inl)-
318{-
319 int ret;-
320 BIO_CONNECT *data;-
321-
322 data = (BIO_CONNECT *)b->ptr;-
323 if (data->state != BIO_CONN_S_OK) {
data->state != 5Description
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-8
324 ret = conn_state(b, data);-
325 if (ret <= 0)
ret <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
326 return ret;
never executed: return ret;
0
327 }
never executed: end of block
0
328-
329 clear_socket_error();-
330 ret = writesocket(b->num, in, inl);-
331 BIO_clear_retry_flags(b);-
332 if (ret <= 0) {
ret <= 0Description
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-8
333 if (BIO_sock_should_retry(ret))
BIO_sock_should_retry(ret)Description
TRUEnever evaluated
FALSEnever evaluated
0
334 BIO_set_retry_write(b);
never executed: BIO_set_flags(b, (0x02|0x08));
0
335 }
never executed: end of block
0
336 return ret;
executed 8 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
8
337}-
338-
339static long conn_ctrl(BIO *b, int cmd, long num, void *ptr)-
340{-
341 BIO *dbio;-
342 int *ip;-
343 const char **pptr = NULL;-
344 long ret = 1;-
345 BIO_CONNECT *data;-
346-
347 data = (BIO_CONNECT *)b->ptr;-
348-
349 switch (cmd) {-
350 case BIO_CTRL_RESET:
never executed: case 1:
0
351 ret = 0;-
352 data->state = BIO_CONN_S_BEFORE;-
353 conn_close_socket(b);-
354 BIO_ADDRINFO_free(data->addr_first);-
355 data->addr_first = NULL;-
356 b->flags = 0;-
357 break;
never executed: break;
0
358 case BIO_C_DO_STATE_MACHINE:
executed 4 times by 1 test: case 101:
Executed by:
  • libcrypto.so.1.1
4
359 /* use this one to start the connection */-
360 if (data->state != BIO_CONN_S_OK)
data->state != 5Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-4
361 ret = (long)conn_state(b, data);
executed 4 times by 1 test: ret = (long)conn_state(b, data);
Executed by:
  • libcrypto.so.1.1
4
362 else-
363 ret = 1;
never executed: ret = 1;
0
364 break;
executed 4 times by 1 test: break;
Executed by:
  • libcrypto.so.1.1
4
365 case BIO_C_GET_CONNECT:
never executed: case 123:
0
366 if (ptr != NULL) {
ptr != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
367 pptr = (const char **)ptr;-
368 if (num == 0) {
num == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
369 *pptr = data->param_hostname;-
370 } else if (num == 1) {
never executed: end of block
num == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
371 *pptr = data->param_service;-
372 } else if (num == 2) {
never executed: end of block
num == 2Description
TRUEnever evaluated
FALSEnever evaluated
0
373 *pptr = (const char *)BIO_ADDRINFO_address(data->addr_iter);-
374 } else if (num == 3) {
never executed: end of block
num == 3Description
TRUEnever evaluated
FALSEnever evaluated
0
375 switch (BIO_ADDRINFO_family(data->addr_iter)) {-
376# ifdef AF_INET6-
377 case AF_INET6:
never executed: case 10 :
0
378 ret = BIO_FAMILY_IPV6;-
379 break;
never executed: break;
0
380# endif-
381 case AF_INET:
never executed: case 2 :
0
382 ret = BIO_FAMILY_IPV4;-
383 break;
never executed: break;
0
384 case 0:
never executed: case 0:
0
385 ret = data->connect_family;-
386 break;
never executed: break;
0
387 default:
never executed: default:
0
388 ret = -1;-
389 break;
never executed: break;
0
390 }-
391 } else {-
392 ret = 0;-
393 }
never executed: end of block
0
394 } else {-
395 ret = 0;-
396 }
never executed: end of block
0
397 break;
never executed: break;
0
398 case BIO_C_SET_CONNECT:
executed 4 times by 1 test: case 100:
Executed by:
  • libcrypto.so.1.1
4
399 if (ptr != NULL) {
ptr != ((void *)0)Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-4
400 b->init = 1;-
401 if (num == 0) {
num == 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
2
402 char *hold_service = data->param_service;-
403 /* We affect the hostname regardless. However, the input-
404 * string might contain a host:service spec, so we must-
405 * parse it, which might or might not affect the service-
406 */-
407 OPENSSL_free(data->param_hostname);-
408 data->param_hostname = NULL;-
409 ret = BIO_parse_hostserv(ptr,-
410 &data->param_hostname,-
411 &data->param_service,-
412 BIO_PARSE_PRIO_HOST);-
413 if (hold_service != data->param_service)
hold_service !...>param_serviceDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-2
414 OPENSSL_free(hold_service);
executed 2 times by 1 test: CRYPTO_free(hold_service, __FILE__, 414);
Executed by:
  • libcrypto.so.1.1
2
415 } else if (num == 1) {
executed 2 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
num == 1Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
416 OPENSSL_free(data->param_service);-
417 data->param_service = BUF_strdup(ptr);-
418 } else if (num == 2) {
never executed: end of block
num == 2Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
419 const BIO_ADDR *addr = (const BIO_ADDR *)ptr;-
420 if (ret) {
retDescription
TRUEnever evaluated
FALSEnever evaluated
0
421 data->param_hostname = BIO_ADDR_hostname_string(addr, 1);-
422 data->param_service = BIO_ADDR_service_string(addr, 1);-
423 BIO_ADDRINFO_free(data->addr_first);-
424 data->addr_first = NULL;-
425 data->addr_iter = NULL;-
426 }
never executed: end of block
0
427 } else if (num == 3) {
never executed: end of block
num == 3Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-2
428 data->connect_family = *(int *)ptr;-
429 } else {
executed 2 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
2
430 ret = 0;-
431 }
never executed: end of block
0
432 }-
433 break;
executed 4 times by 1 test: break;
Executed by:
  • libcrypto.so.1.1
4
434 case BIO_C_SET_NBIO:
executed 2 times by 1 test: case 102:
Executed by:
  • libcrypto.so.1.1
2
435 if (num != 0)
num != 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-2
436 data->connect_mode |= BIO_SOCK_NONBLOCK;
executed 2 times by 1 test: data->connect_mode |= 0x08;
Executed by:
  • libcrypto.so.1.1
2
437 else-
438 data->connect_mode &= ~BIO_SOCK_NONBLOCK;
never executed: data->connect_mode &= ~0x08;
0
439 break;
executed 2 times by 1 test: break;
Executed by:
  • libcrypto.so.1.1
2
440 case BIO_C_SET_CONNECT_MODE:
never executed: case 155:
0
441 data->connect_mode = (int)num;-
442 break;
never executed: break;
0
443 case BIO_C_GET_FD:
never executed: case 105:
0
444 if (b->init) {
b->initDescription
TRUEnever evaluated
FALSEnever evaluated
0
445 ip = (int *)ptr;-
446 if (ip != NULL)
ip != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
447 *ip = b->num;
never executed: *ip = b->num;
0
448 ret = b->num;-
449 } else
never executed: end of block
0
450 ret = -1;
never executed: ret = -1;
0
451 break;
never executed: break;
0
452 case BIO_CTRL_GET_CLOSE:
never executed: case 8:
0
453 ret = b->shutdown;-
454 break;
never executed: break;
0
455 case BIO_CTRL_SET_CLOSE:
never executed: case 9:
0
456 b->shutdown = (int)num;-
457 break;
never executed: break;
0
458 case BIO_CTRL_PENDING:
never executed: case 10:
0
459 case BIO_CTRL_WPENDING:
never executed: case 13:
0
460 ret = 0;-
461 break;
never executed: break;
0
462 case BIO_CTRL_FLUSH:
executed 6 times by 1 test: case 11:
Executed by:
  • libcrypto.so.1.1
6
463 break;
executed 6 times by 1 test: break;
Executed by:
  • libcrypto.so.1.1
6
464 case BIO_CTRL_DUP:
never executed: case 12:
0
465 {-
466 dbio = (BIO *)ptr;-
467 if (data->param_hostname)
data->param_hostnameDescription
TRUEnever evaluated
FALSEnever evaluated
0
468 BIO_set_conn_hostname(dbio, data->param_hostname);
never executed: BIO_ctrl(dbio,100,0, (char *)(data->param_hostname));
0
469 if (data->param_service)
data->param_serviceDescription
TRUEnever evaluated
FALSEnever evaluated
0
470 BIO_set_conn_port(dbio, data->param_service);
never executed: BIO_ctrl(dbio,100,1, (char *)(data->param_service));
0
471 BIO_set_conn_ip_family(dbio, data->connect_family);-
472 BIO_set_conn_mode(dbio, data->connect_mode);-
473 /*-
474 * FIXME: the cast of the function seems unlikely to be a good-
475 * idea-
476 */-
477 (void)BIO_set_info_callback(dbio, data->info_callback);-
478 }-
479 break;
never executed: break;
0
480 case BIO_CTRL_SET_CALLBACK:
never executed: case 14:
0
481 ret = 0; /* use callback ctrl */-
482 break;
never executed: break;
0
483 case BIO_CTRL_GET_CALLBACK:
never executed: case 15:
0
484 {-
485 BIO_info_cb **fptr;-
486-
487 fptr = (BIO_info_cb **)ptr;-
488 *fptr = data->info_callback;-
489 }-
490 break;
never executed: break;
0
491 default:
executed 12 times by 1 test: default:
Executed by:
  • libcrypto.so.1.1
12
492 ret = 0;-
493 break;
executed 12 times by 1 test: break;
Executed by:
  • libcrypto.so.1.1
12
494 }-
495 return ret;
executed 28 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
28
496}-
497-
498static long conn_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp)-
499{-
500 long ret = 1;-
501 BIO_CONNECT *data;-
502-
503 data = (BIO_CONNECT *)b->ptr;-
504-
505 switch (cmd) {-
506 case BIO_CTRL_SET_CALLBACK:
never executed: case 14:
0
507 {-
508 data->info_callback = fp;-
509 }-
510 break;
never executed: break;
0
511 default:
never executed: default:
0
512 ret = 0;-
513 break;
never executed: break;
0
514 }-
515 return ret;
never executed: return ret;
0
516}-
517-
518static int conn_puts(BIO *bp, const char *str)-
519{-
520 int n, ret;-
521-
522 n = strlen(str);-
523 ret = conn_write(bp, str, n);-
524 return ret;
never executed: return ret;
0
525}-
526-
527BIO *BIO_new_connect(const char *str)-
528{-
529 BIO *ret;-
530-
531 ret = BIO_new(BIO_s_connect());-
532 if (ret == NULL)
ret == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2
533 return NULL;
never executed: return ((void *)0) ;
0
534 if (BIO_set_conn_hostname(ret, str))
BIO_ctrl(ret,1...(char *)(str))Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-2
535 return ret;
executed 2 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
2
536 BIO_free(ret);-
537 return NULL;
never executed: return ((void *)0) ;
0
538}-
539-
540#endif-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2