OpenCoverage

eng_list.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/engine/eng_list.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: eng_list.c,v 1.23 2018/08/24 19:25:31 tb Exp $ */-
2/* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL-
3 * project 2000.-
4 */-
5/* ====================================================================-
6 * Copyright (c) 1999-2001 The OpenSSL Project. All rights reserved.-
7 *-
8 * Redistribution and use in source and binary forms, with or without-
9 * modification, are permitted provided that the following conditions-
10 * are met:-
11 *-
12 * 1. Redistributions of source code must retain the above copyright-
13 * notice, this list of conditions and the following disclaimer.-
14 *-
15 * 2. Redistributions in binary form must reproduce the above copyright-
16 * notice, this list of conditions and the following disclaimer in-
17 * the documentation and/or other materials provided with the-
18 * distribution.-
19 *-
20 * 3. All advertising materials mentioning features or use of this-
21 * software must display the following acknowledgment:-
22 * "This product includes software developed by the OpenSSL Project-
23 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"-
24 *-
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to-
26 * endorse or promote products derived from this software without-
27 * prior written permission. For written permission, please contact-
28 * licensing@OpenSSL.org.-
29 *-
30 * 5. Products derived from this software may not be called "OpenSSL"-
31 * nor may "OpenSSL" appear in their names without prior written-
32 * permission of the OpenSSL Project.-
33 *-
34 * 6. Redistributions of any form whatsoever must retain the following-
35 * acknowledgment:-
36 * "This product includes software developed by the OpenSSL Project-
37 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"-
38 *-
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY-
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR-
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR-
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT-
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)-
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED-
50 * OF THE POSSIBILITY OF SUCH DAMAGE.-
51 * ====================================================================-
52 *-
53 * This product includes cryptographic software written by Eric Young-
54 * (eay@cryptsoft.com). This product includes software written by Tim-
55 * Hudson (tjh@cryptsoft.com).-
56 *-
57 */-
58/* ====================================================================-
59 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.-
60 * ECDH support in OpenSSL originally developed by-
61 * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.-
62 */-
63-
64#include <string.h>-
65#include <unistd.h>-
66-
67#include <openssl/opensslconf.h>-
68-
69#include <openssl/err.h>-
70-
71#include "cryptlib.h"-
72#include "eng_int.h"-
73-
74/* The linked-list of pointers to engine types. engine_list_head-
75 * incorporates an implicit structural reference but engine_list_tail-
76 * does not - the latter is a computational niceity and only points-
77 * to something that is already pointed to by its predecessor in the-
78 * list (or engine_list_head itself). In the same way, the use of the-
79 * "prev" pointer in each ENGINE is to save excessive list iteration,-
80 * it doesn't correspond to an extra structural reference. Hence,-
81 * engine_list_head, and each non-null "next" pointer account for-
82 * the list itself assuming exactly 1 structural reference on each-
83 * list member. */-
84static ENGINE *engine_list_head = NULL;-
85static ENGINE *engine_list_tail = NULL;-
86-
87/* This cleanup function is only needed internally. If it should be called, we-
88 * register it with the "ENGINE_cleanup()" stack to be called during cleanup. */-
89-
90static void-
91engine_list_cleanup(void)-
92{-
93 ENGINE *iterator = engine_list_head;-
94-
95 while (iterator != NULL && ENGINE_remove(iterator))
iterator != ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • enginetest
ENGINE_remove(iterator)Description
TRUEnever evaluated
FALSEnever evaluated
0-4
96 iterator = engine_list_head;
never executed: iterator = engine_list_head;
0
97}
executed 4 times by 1 test: end of block
Executed by:
  • enginetest
4
98-
99/* These static functions starting with a lower case "engine_" always-
100 * take place when CRYPTO_LOCK_ENGINE has been locked up. */-
101static int-
102engine_list_add(ENGINE *e)-
103{-
104 int conflict = 0;-
105 ENGINE *iterator = NULL;-
106-
107 if (e == NULL) {
e == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 518 times by 1 test
Evaluated by:
  • enginetest
0-518
108 ENGINEerror(ERR_R_PASSED_NULL_PARAMETER);-
109 return 0;
never executed: return 0;
0
110 }-
111 iterator = engine_list_head;-
112 while (iterator && !conflict) {
iteratorDescription
TRUEevaluated 130820 times by 1 test
Evaluated by:
  • enginetest
FALSEevaluated 517 times by 1 test
Evaluated by:
  • enginetest
!conflictDescription
TRUEevaluated 130819 times by 1 test
Evaluated by:
  • enginetest
FALSEevaluated 1 time by 1 test
Evaluated by:
  • enginetest
1-130820
113 conflict = (strcmp(iterator->id, e->id) == 0);
never executed: __result = (((const unsigned char *) (const char *) ( iterator->id ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( e->id ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
114 iterator = iterator->next;-
115 }
executed 130819 times by 1 test: end of block
Executed by:
  • enginetest
130819
116 if (conflict) {
conflictDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • enginetest
FALSEevaluated 517 times by 1 test
Evaluated by:
  • enginetest
1-517
117 ENGINEerror(ENGINE_R_CONFLICTING_ENGINE_ID);-
118 return 0;
executed 1 time by 1 test: return 0;
Executed by:
  • enginetest
1
119 }-
120 if (engine_list_head == NULL) {
engine_list_he...== ((void *)0)Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • enginetest
FALSEevaluated 513 times by 1 test
Evaluated by:
  • enginetest
4-513
121 /* We are adding to an empty list. */-
122 if (engine_list_tail) {
engine_list_tailDescription
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • enginetest
0-4
123 ENGINEerror(ENGINE_R_INTERNAL_LIST_ERROR);-
124 return 0;
never executed: return 0;
0
125 }-
126 engine_list_head = e;-
127 e->prev = NULL;-
128 /* The first time the list allocates, we should register the-
129 * cleanup. */-
130 engine_cleanup_add_last(engine_list_cleanup);-
131 } else {
executed 4 times by 1 test: end of block
Executed by:
  • enginetest
4
132 /* We are adding to the tail of an existing list. */-
133 if ((engine_list_tail == NULL) ||
(engine_list_t... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 513 times by 1 test
Evaluated by:
  • enginetest
0-513
134 (engine_list_tail->next != NULL)) {
(engine_list_t... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 513 times by 1 test
Evaluated by:
  • enginetest
0-513
135 ENGINEerror(ENGINE_R_INTERNAL_LIST_ERROR);-
136 return 0;
never executed: return 0;
0
137 }-
138 engine_list_tail->next = e;-
139 e->prev = engine_list_tail;-
140 }
executed 513 times by 1 test: end of block
Executed by:
  • enginetest
513
141 /* Having the engine in the list assumes a structural-
142 * reference. */-
143 e->struct_ref++;-
144 engine_ref_debug(e, 0, 1)-
145 /* However it came to be, e is the last item in the list. */-
146 engine_list_tail = e;-
147 e->next = NULL;-
148 return 1;
executed 517 times by 1 test: return 1;
Executed by:
  • enginetest
517
149}-
150-
151static int-
152engine_list_remove(ENGINE *e)-
153{-
154 ENGINE *iterator;-
155-
156 if (e == NULL) {
e == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 518 times by 1 test
Evaluated by:
  • enginetest
0-518
157 ENGINEerror(ERR_R_PASSED_NULL_PARAMETER);-
158 return 0;
never executed: return 0;
0
159 }-
160 /* We need to check that e is in our linked list! */-
161 iterator = engine_list_head;-
162 while (iterator && (iterator != e))
iteratorDescription
TRUEevaluated 520 times by 1 test
Evaluated by:
  • enginetest
FALSEevaluated 1 time by 1 test
Evaluated by:
  • enginetest
(iterator != e)Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • enginetest
FALSEevaluated 517 times by 1 test
Evaluated by:
  • enginetest
1-520
163 iterator = iterator->next;
executed 3 times by 1 test: iterator = iterator->next;
Executed by:
  • enginetest
3
164 if (iterator == NULL) {
iterator == ((void *)0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • enginetest
FALSEevaluated 517 times by 1 test
Evaluated by:
  • enginetest
1-517
165 ENGINEerror(ENGINE_R_ENGINE_IS_NOT_IN_LIST);-
166 return 0;
executed 1 time by 1 test: return 0;
Executed by:
  • enginetest
1
167 }-
168 /* un-link e from the chain. */-
169 if (e->next)
e->nextDescription
TRUEevaluated 512 times by 1 test
Evaluated by:
  • enginetest
FALSEevaluated 5 times by 1 test
Evaluated by:
  • enginetest
5-512
170 e->next->prev = e->prev;
executed 512 times by 1 test: e->next->prev = e->prev;
Executed by:
  • enginetest
512
171 if (e->prev)
e->prevDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • enginetest
FALSEevaluated 516 times by 1 test
Evaluated by:
  • enginetest
1-516
172 e->prev->next = e->next;
executed 1 time by 1 test: e->prev->next = e->next;
Executed by:
  • enginetest
1
173 /* Correct our head/tail if necessary. */-
174 if (engine_list_head == e)
engine_list_head == eDescription
TRUEevaluated 516 times by 1 test
Evaluated by:
  • enginetest
FALSEevaluated 1 time by 1 test
Evaluated by:
  • enginetest
1-516
175 engine_list_head = e->next;
executed 516 times by 1 test: engine_list_head = e->next;
Executed by:
  • enginetest
516
176 if (engine_list_tail == e)
engine_list_tail == eDescription
TRUEevaluated 5 times by 1 test
Evaluated by:
  • enginetest
FALSEevaluated 512 times by 1 test
Evaluated by:
  • enginetest
5-512
177 engine_list_tail = e->prev;
executed 5 times by 1 test: engine_list_tail = e->prev;
Executed by:
  • enginetest
5
178 engine_free_util(e, 0);-
179 return 1;
executed 517 times by 1 test: return 1;
Executed by:
  • enginetest
517
180}-
181-
182/* Get the first/last "ENGINE" type available. */-
183ENGINE *-
184ENGINE_get_first(void)-
185{-
186 ENGINE *ret;-
187-
188 CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);-
189 ret = engine_list_head;-
190 if (ret) {
retDescription
TRUEevaluated 518 times by 1 test
Evaluated by:
  • enginetest
FALSEevaluated 12 times by 4 tests
Evaluated by:
  • enginetest
  • evptest
  • gost2814789t
  • pbkdf2
12-518
191 ret->struct_ref++;-
192 engine_ref_debug(ret, 0, 1)-
193 }
executed 518 times by 1 test: end of block
Executed by:
  • enginetest
518
194 CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);-
195 return ret;
executed 530 times by 4 tests: return ret;
Executed by:
  • enginetest
  • evptest
  • gost2814789t
  • pbkdf2
530
196}-
197-
198ENGINE *-
199ENGINE_get_last(void)-
200{-
201 ENGINE *ret;-
202-
203 CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);-
204 ret = engine_list_tail;-
205 if (ret) {
retDescription
TRUEnever evaluated
FALSEnever evaluated
0
206 ret->struct_ref++;-
207 engine_ref_debug(ret, 0, 1)-
208 }
never executed: end of block
0
209 CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);-
210 return ret;
never executed: return ret;
0
211}-
212-
213/* Iterate to the next/previous "ENGINE" type (NULL = end of the list). */-
214ENGINE *-
215ENGINE_get_next(ENGINE *e)-
216{-
217 ENGINE *ret = NULL;-
218-
219 if (e == NULL) {
e == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 7 times by 1 test
Evaluated by:
  • enginetest
0-7
220 ENGINEerror(ERR_R_PASSED_NULL_PARAMETER);-
221 return 0;
never executed: return 0;
0
222 }-
223 CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);-
224 ret = e->next;-
225 if (ret) {
retDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • enginetest
FALSEevaluated 5 times by 1 test
Evaluated by:
  • enginetest
2-5
226 /* Return a valid structural refernce to the next ENGINE */-
227 ret->struct_ref++;-
228 engine_ref_debug(ret, 0, 1)-
229 }
executed 2 times by 1 test: end of block
Executed by:
  • enginetest
2
230 CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);-
231 /* Release the structural reference to the previous ENGINE */-
232 ENGINE_free(e);-
233 return ret;
executed 7 times by 1 test: return ret;
Executed by:
  • enginetest
7
234}-
235-
236ENGINE *-
237ENGINE_get_prev(ENGINE *e)-
238{-
239 ENGINE *ret = NULL;-
240-
241 if (e == NULL) {
e == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
242 ENGINEerror(ERR_R_PASSED_NULL_PARAMETER);-
243 return 0;
never executed: return 0;
0
244 }-
245 CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);-
246 ret = e->prev;-
247 if (ret) {
retDescription
TRUEnever evaluated
FALSEnever evaluated
0
248 /* Return a valid structural reference to the next ENGINE */-
249 ret->struct_ref++;-
250 engine_ref_debug(ret, 0, 1)-
251 }
never executed: end of block
0
252 CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);-
253 /* Release the structural reference to the previous ENGINE */-
254 ENGINE_free(e);-
255 return ret;
never executed: return ret;
0
256}-
257-
258/* Add another "ENGINE" type into the list. */-
259int-
260ENGINE_add(ENGINE *e)-
261{-
262 int to_return = 1;-
263-
264 if (e == NULL) {
e == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 518 times by 1 test
Evaluated by:
  • enginetest
0-518
265 ENGINEerror(ERR_R_PASSED_NULL_PARAMETER);-
266 return 0;
never executed: return 0;
0
267 }-
268 if ((e->id == NULL) || (e->name == NULL)) {
(e->id == ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 518 times by 1 test
Evaluated by:
  • enginetest
(e->name == ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 518 times by 1 test
Evaluated by:
  • enginetest
0-518
269 ENGINEerror(ENGINE_R_ID_OR_NAME_MISSING);-
270 }
never executed: end of block
0
271 CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);-
272 if (!engine_list_add(e)) {
!engine_list_add(e)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • enginetest
FALSEevaluated 517 times by 1 test
Evaluated by:
  • enginetest
1-517
273 ENGINEerror(ENGINE_R_INTERNAL_LIST_ERROR);-
274 to_return = 0;-
275 }
executed 1 time by 1 test: end of block
Executed by:
  • enginetest
1
276 CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);-
277 return to_return;
executed 518 times by 1 test: return to_return;
Executed by:
  • enginetest
518
278}-
279-
280/* Remove an existing "ENGINE" type from the array. */-
281int-
282ENGINE_remove(ENGINE *e)-
283{-
284 int to_return = 1;-
285-
286 if (e == NULL) {
e == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 518 times by 1 test
Evaluated by:
  • enginetest
0-518
287 ENGINEerror(ERR_R_PASSED_NULL_PARAMETER);-
288 return 0;
never executed: return 0;
0
289 }-
290 CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);-
291 if (!engine_list_remove(e)) {
!engine_list_remove(e)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • enginetest
FALSEevaluated 517 times by 1 test
Evaluated by:
  • enginetest
1-517
292 ENGINEerror(ENGINE_R_INTERNAL_LIST_ERROR);-
293 to_return = 0;-
294 }
executed 1 time by 1 test: end of block
Executed by:
  • enginetest
1
295 CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);-
296 return to_return;
executed 518 times by 1 test: return to_return;
Executed by:
  • enginetest
518
297}-
298-
299static void-
300engine_cpy(ENGINE *dest, const ENGINE *src)-
301{-
302 dest->id = src->id;-
303 dest->name = src->name;-
304#ifndef OPENSSL_NO_RSA-
305 dest->rsa_meth = src->rsa_meth;-
306#endif-
307#ifndef OPENSSL_NO_DSA-
308 dest->dsa_meth = src->dsa_meth;-
309#endif-
310#ifndef OPENSSL_NO_DH-
311 dest->dh_meth = src->dh_meth;-
312#endif-
313#ifndef OPENSSL_NO_ECDH-
314 dest->ecdh_meth = src->ecdh_meth;-
315#endif-
316#ifndef OPENSSL_NO_ECDSA-
317 dest->ecdsa_meth = src->ecdsa_meth;-
318#endif-
319 dest->rand_meth = src->rand_meth;-
320 dest->store_meth = src->store_meth;-
321 dest->ciphers = src->ciphers;-
322 dest->digests = src->digests;-
323 dest->pkey_meths = src->pkey_meths;-
324 dest->destroy = src->destroy;-
325 dest->init = src->init;-
326 dest->finish = src->finish;-
327 dest->ctrl = src->ctrl;-
328 dest->load_privkey = src->load_privkey;-
329 dest->load_pubkey = src->load_pubkey;-
330 dest->cmd_defns = src->cmd_defns;-
331 dest->flags = src->flags;-
332}
never executed: end of block
0
333-
334ENGINE *-
335ENGINE_by_id(const char *id)-
336{-
337 ENGINE *iterator;-
338-
339 if (id == NULL) {
id == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
340 ENGINEerror(ERR_R_PASSED_NULL_PARAMETER);-
341 return NULL;
never executed: return ((void *)0) ;
0
342 }-
343 CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);-
344 iterator = engine_list_head;-
345 while (iterator && (strcmp(id, iterator->id) != 0))
never executed: __result = (((const unsigned char *) (const char *) ( id ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( iterator->id ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
iteratorDescription
TRUEnever evaluated
FALSEnever evaluated
( __extension_...)))); }) != 0)Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
346 iterator = iterator->next;
never executed: iterator = iterator->next;
0
347 if (iterator) {
iteratorDescription
TRUEnever evaluated
FALSEnever evaluated
0
348 /* We need to return a structural reference. If this is an-
349 * ENGINE type that returns copies, make a duplicate - otherwise-
350 * increment the existing ENGINE's reference count. */-
351 if (iterator->flags & ENGINE_FLAGS_BY_ID_COPY) {
iterator->flags & (int)0x0004Description
TRUEnever evaluated
FALSEnever evaluated
0
352 ENGINE *cp = ENGINE_new();-
353 if (!cp)
!cpDescription
TRUEnever evaluated
FALSEnever evaluated
0
354 iterator = NULL;
never executed: iterator = ((void *)0) ;
0
355 else {-
356 engine_cpy(cp, iterator);-
357 iterator = cp;-
358 }
never executed: end of block
0
359 } else {-
360 iterator->struct_ref++;-
361 engine_ref_debug(iterator, 0, 1)-
362 }
never executed: end of block
0
363 }-
364 CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);-
365-
366 if (iterator == NULL) {
iterator == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
367 ENGINEerror(ENGINE_R_NO_SUCH_ENGINE);-
368 ERR_asprintf_error_data("id=%s", id);-
369 }
never executed: end of block
0
370 return iterator;
never executed: return iterator;
0
371}-
372-
373int-
374ENGINE_up_ref(ENGINE *e)-
375{-
376 int refs;-
377-
378 if (e == NULL) {
e == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
379 ENGINEerror(ERR_R_PASSED_NULL_PARAMETER);-
380 return 0;
never executed: return 0;
0
381 }-
382 refs = CRYPTO_add(&e->struct_ref, 1, CRYPTO_LOCK_ENGINE);-
383 return refs > 1 ? 1 : 0;
never executed: return refs > 1 ? 1 : 0;
refs > 1Description
TRUEnever evaluated
FALSEnever evaluated
0
384}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2