OpenCoverage

conf_api.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/conf/conf_api.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: conf_api.c,v 1.15 2015/04/11 16:03:21 deraadt Exp $ */-
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)-
3 * All rights reserved.-
4 *-
5 * This package is an SSL implementation written-
6 * by Eric Young (eay@cryptsoft.com).-
7 * The implementation was written so as to conform with Netscapes SSL.-
8 *-
9 * This library is free for commercial and non-commercial use as long as-
10 * the following conditions are aheared to. The following conditions-
11 * apply to all code found in this distribution, be it the RC4, RSA,-
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation-
13 * included with this distribution is covered by the same copyright terms-
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).-
15 *-
16 * Copyright remains Eric Young's, and as such any Copyright notices in-
17 * the code are not to be removed.-
18 * If this package is used in a product, Eric Young should be given attribution-
19 * as the author of the parts of the library used.-
20 * This can be in the form of a textual message at program startup or-
21 * in documentation (online or textual) provided with the package.-
22 *-
23 * Redistribution and use in source and binary forms, with or without-
24 * modification, are permitted provided that the following conditions-
25 * are met:-
26 * 1. Redistributions of source code must retain the copyright-
27 * notice, this list of conditions and the following disclaimer.-
28 * 2. Redistributions in binary form must reproduce the above copyright-
29 * notice, this list of conditions and the following disclaimer in the-
30 * documentation and/or other materials provided with the distribution.-
31 * 3. All advertising materials mentioning features or use of this software-
32 * must display the following acknowledgement:-
33 * "This product includes cryptographic software written by-
34 * Eric Young (eay@cryptsoft.com)"-
35 * The word 'cryptographic' can be left out if the rouines from the library-
36 * being used are not cryptographic related :-).-
37 * 4. If you include any Windows specific code (or a derivative thereof) from-
38 * the apps directory (application code) you must include an acknowledgement:-
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"-
40 *-
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND-
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE-
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-
51 * SUCH DAMAGE.-
52 *-
53 * The licence and distribution terms for any publically available version or-
54 * derivative of this code cannot be changed. i.e. this code cannot simply be-
55 * copied and put under another distribution licence-
56 * [including the GNU Public Licence.]-
57 */-
58-
59/* Part of the code in here was originally in conf.c, which is now removed */-
60-
61#ifndef CONF_DEBUG-
62# undef NDEBUG /* avoid conflicting definitions */-
63# define NDEBUG-
64#endif-
65-
66#include <stdlib.h>-
67#include <string.h>-
68#include <unistd.h>-
69#include <openssl/conf.h>-
70#include <openssl/conf_api.h>-
71-
72static void value_free_hash_doall_arg(CONF_VALUE *a,-
73 LHASH_OF(CONF_VALUE) *conf);-
74static void value_free_stack_doall(CONF_VALUE *a);-
75static
executed 30 times by 1 test: end of block
Executed by:
  • libcrypto.so.44.0.1
IMPLEMENT_LHASH_DOALL_ARG_FN(value_free_hash, CONF_VALUE,
executed 30 times by 1 test: end of block
Executed by:
  • libcrypto.so.44.0.1
30
76 LHASH_OF(CONF_VALUE))-
77static
executed 6 times by 1 test: end of block
Executed by:
  • libcrypto.so.44.0.1
IMPLEMENT_LHASH_DOALL_FN(value_free_stack, CONF_VALUE)
executed 6 times by 1 test: end of block
Executed by:
  • libcrypto.so.44.0.1
6
78-
79/* Up until OpenSSL 0.9.5a, this was get_section */-
80CONF_VALUE *-
81_CONF_get_section(const CONF *conf, const char *section)-
82{-
83 CONF_VALUE *v, vv;-
84-
85 if ((conf == NULL) || (section == NULL))
(conf == ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
(section == ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-6
86 return (NULL);
never executed: return ( ((void *)0) );
0
87 vv.name = NULL;-
88 vv.section = (char *)section;-
89 v = lh_CONF_VALUE_retrieve(conf->data, &vv);-
90 return (v);
executed 6 times by 1 test: return (v);
Executed by:
  • libcrypto.so.44.0.1
6
91}-
92-
93/* Up until OpenSSL 0.9.5a, this was CONF_get_section */-
94STACK_OF(CONF_VALUE) *-
95_CONF_get_section_values(const CONF *conf, const char *section)-
96{-
97 CONF_VALUE *v;-
98-
99 v = _CONF_get_section(conf, section);-
100 if (v != NULL)
v != ((void *)0)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEnever evaluated
0-2
101 return ((STACK_OF(CONF_VALUE) *)v->value);
executed 2 times by 1 test: return ((struct stack_st_CONF_VALUE *)v->value);
Executed by:
  • libcrypto.so.44.0.1
2
102 else-
103 return (NULL);
never executed: return ( ((void *)0) );
0
104}-
105-
106int-
107_CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value)-
108{-
109 CONF_VALUE *v = NULL;-
110 STACK_OF(CONF_VALUE) *ts;-
111-
112 ts = (STACK_OF(CONF_VALUE) *)section->value;-
113-
114 value->section = section->section;-
115 if (!sk_CONF_VALUE_push(ts, value)) {
!sk_push(((_ST...NF_VALUE*)0)))Description
TRUEnever evaluated
FALSEevaluated 24 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-24
116 return 0;
never executed: return 0;
0
117 }-
118-
119 v = lh_CONF_VALUE_insert(conf->data, value);-
120 if (v != NULL) {
v != ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 24 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-24
121 (void)sk_CONF_VALUE_delete_ptr(ts, v);-
122 free(v->name);-
123 free(v->value);-
124 free(v);-
125 }
never executed: end of block
0
126 return 1;
executed 24 times by 1 test: return 1;
Executed by:
  • libcrypto.so.44.0.1
24
127}-
128-
129char *-
130_CONF_get_string(const CONF *conf, const char *section, const char *name)-
131{-
132 CONF_VALUE *v, vv;-
133-
134 if (name == NULL)
name == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 58 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-58
135 return (NULL);
never executed: return ( ((void *)0) );
0
136 if (conf != NULL) {
conf != ((void *)0)Description
TRUEevaluated 58 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEnever evaluated
0-58
137 if (section != NULL) {
section != ((void *)0)Description
TRUEevaluated 54 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
4-54
138 vv.name = (char *)name;-
139 vv.section = (char *)section;-
140 v = lh_CONF_VALUE_retrieve(conf->data, &vv);-
141 if (v != NULL)
v != ((void *)0)Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 41 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
13-41
142 return (v->value);
executed 13 times by 1 test: return (v->value);
Executed by:
  • libcrypto.so.44.0.1
13
143 }
executed 41 times by 1 test: end of block
Executed by:
  • libcrypto.so.44.0.1
41
144 vv.section = "default";-
145 vv.name = (char *)name;-
146 v = lh_CONF_VALUE_retrieve(conf->data, &vv);-
147 if (v != NULL)
v != ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 45 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-45
148 return (v->value);
never executed: return (v->value);
0
149 else-
150 return (NULL);
executed 45 times by 1 test: return ( ((void *)0) );
Executed by:
  • libcrypto.so.44.0.1
45
151 } else-
152 return (NULL);
never executed: return ( ((void *)0) );
0
153}-
154-
155static unsigned long-
156conf_value_hash(const CONF_VALUE *v)-
157{-
158 return (lh_strhash(v->section) << 2) ^ lh_strhash(v->name);
executed 159 times by 1 test: return (lh_strhash(v->section) << 2) ^ lh_strhash(v->name);
Executed by:
  • libcrypto.so.44.0.1
159
159}-
160-
161static
executed 159 times by 1 test: return conf_value_hash(a);
Executed by:
  • libcrypto.so.44.0.1
IMPLEMENT_LHASH_HASH_FN(conf_value, CONF_VALUE)
executed 159 times by 1 test: return conf_value_hash(a);
Executed by:
  • libcrypto.so.44.0.1
159
162-
163static int-
164conf_value_cmp(const CONF_VALUE *a, const CONF_VALUE *b)-
165{-
166 int i;-
167-
168 if (a->section != b->section) {
a->section != b->sectionDescription
TRUEevaluated 15 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 24 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
15-24
169 i = strcmp(a->section, b->section);
never executed: __result = (((const unsigned char *) (const char *) ( a->section ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( b->section ))[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
170 if (i)
iDescription
TRUEnever evaluated
FALSEevaluated 15 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-15
171 return (i);
never executed: return (i);
0
172 }
executed 15 times by 1 test: end of block
Executed by:
  • libcrypto.so.44.0.1
15
173 if ((a->name != NULL) && (b->name != NULL)) {
(a->name != ((void *)0) )Description
TRUEevaluated 37 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
(b->name != ((void *)0) )Description
TRUEevaluated 37 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEnever evaluated
0-37
174 i = strcmp(a->name, b->name);
never executed: __result = (((const unsigned char *) (const char *) ( a->name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( b->name ))[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
175 return (i);
executed 37 times by 1 test: return (i);
Executed by:
  • libcrypto.so.44.0.1
37
176 } else if (a->name == b->name)
a->name == b->nameDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEnever evaluated
0-2
177 return (0);
executed 2 times by 1 test: return (0);
Executed by:
  • libcrypto.so.44.0.1
2
178 else-
179 return ((a->name == NULL)?-1 : 1);
never executed: return ((a->name == ((void *)0) )?-1 : 1);
(a->name == ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
180}-
181-
182static
executed 39 times by 1 test: return conf_value_cmp(a,b);
Executed by:
  • libcrypto.so.44.0.1
IMPLEMENT_LHASH_COMP_FN(conf_value, CONF_VALUE)
executed 39 times by 1 test: return conf_value_cmp(a,b);
Executed by:
  • libcrypto.so.44.0.1
39
183-
184int-
185_CONF_new_data(CONF *conf)-
186{-
187 if (conf == NULL) {
conf == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-2
188 return 0;
never executed: return 0;
0
189 }-
190 if (conf->data == NULL)
conf->data == ((void *)0)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEnever evaluated
0-2
191 if ((conf->data = lh_CONF_VALUE_new()) == NULL) {
(conf->data = ...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-2
192 return 0;
never executed: return 0;
0
193 }-
194 return 1;
executed 2 times by 1 test: return 1;
Executed by:
  • libcrypto.so.44.0.1
2
195}-
196-
197void-
198_CONF_free_data(CONF *conf)-
199{-
200 if (conf == NULL || conf->data == NULL)
conf == ((void *)0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • freenull
FALSEevaluated 214 times by 2 tests
Evaluated by:
  • freenull
  • libcrypto.so.44.0.1
conf->data == ((void *)0)Description
TRUEevaluated 212 times by 2 tests
Evaluated by:
  • freenull
  • libcrypto.so.44.0.1
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
1-214
201 return;
executed 213 times by 2 tests: return;
Executed by:
  • freenull
  • libcrypto.so.44.0.1
213
202-
203 lh_CONF_VALUE_down_load(conf->data) = 0; /* evil thing to make-
204 * sure the 'free()' works as-
205 * expected */-
206 lh_CONF_VALUE_doall_arg(conf->data,-
207 LHASH_DOALL_ARG_FN(value_free_hash),-
208 LHASH_OF(CONF_VALUE), conf->data);-
209-
210 /* We now have only 'section' entries in the hash table.-
211 * Due to problems with */-
212-
213 lh_CONF_VALUE_doall(conf->data, LHASH_DOALL_FN(value_free_stack));-
214 lh_CONF_VALUE_free(conf->data);-
215}
executed 2 times by 1 test: end of block
Executed by:
  • libcrypto.so.44.0.1
2
216-
217static void-
218value_free_hash_doall_arg(CONF_VALUE *a, LHASH_OF(CONF_VALUE) *conf)-
219{-
220 if (a->name != NULL)
a->name != ((void *)0)Description
TRUEevaluated 24 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
6-24
221 (void)lh_CONF_VALUE_delete(conf, a);
executed 24 times by 1 test: (void)((CONF_VALUE *)lh_delete(((_LHASH *)((void*) (1 ? conf : (struct lhash_st_CONF_VALUE*)0))), ((void*) (1 ? a : (CONF_VALUE*)0))));
Executed by:
  • libcrypto.so.44.0.1
24
222}
executed 30 times by 1 test: end of block
Executed by:
  • libcrypto.so.44.0.1
30
223-
224static void-
225value_free_stack_doall(CONF_VALUE *a)-
226{-
227 CONF_VALUE *vv;-
228 STACK_OF(CONF_VALUE) *sk;-
229 int i;-
230-
231 if (a->name != NULL)
a->name != ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-6
232 return;
never executed: return;
0
233-
234 sk = (STACK_OF(CONF_VALUE) *)a->value;-
235 for (i = sk_CONF_VALUE_num(sk) - 1; i >= 0; i--) {
i >= 0Description
TRUEevaluated 24 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
6-24
236 vv = sk_CONF_VALUE_value(sk, i);-
237 free(vv->value);-
238 free(vv->name);-
239 free(vv);-
240 }
executed 24 times by 1 test: end of block
Executed by:
  • libcrypto.so.44.0.1
24
241 if (sk != NULL)
sk != ((void *)0)Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEnever evaluated
0-6
242 sk_CONF_VALUE_free(sk);
executed 6 times by 1 test: sk_free(((_STACK*) (1 ? (sk) : (struct stack_st_CONF_VALUE*)0)));
Executed by:
  • libcrypto.so.44.0.1
6
243 free(a->section);-
244 free(a);-
245}
executed 6 times by 1 test: end of block
Executed by:
  • libcrypto.so.44.0.1
6
246-
247/* Up until OpenSSL 0.9.5a, this was new_section */-
248CONF_VALUE *-
249_CONF_new_section(CONF *conf, const char *section)-
250{-
251 STACK_OF(CONF_VALUE) *sk = NULL;-
252 int ok = 0, i;-
253 CONF_VALUE *v = NULL, *vv;-
254-
255 if ((sk = sk_CONF_VALUE_new_null()) == NULL)
(sk = ((struct...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-6
256 goto err;
never executed: goto err;
0
257 if ((v = malloc(sizeof(CONF_VALUE))) == NULL)
(v = malloc(si...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-6
258 goto err;
never executed: goto err;
0
259 i = strlen(section) + 1;-
260 if ((v->section = malloc(i)) == NULL)
(v->section = ...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-6
261 goto err;
never executed: goto err;
0
262-
263 memcpy(v->section, section, i);-
264 v->name = NULL;-
265 v->value = (char *)sk;-
266-
267 vv = lh_CONF_VALUE_insert(conf->data, v);-
268 OPENSSL_assert(vv == NULL);-
269 ok = 1;-
270-
271err:
code before this statement executed 6 times by 1 test: err:
Executed by:
  • libcrypto.so.44.0.1
6
272 if (!ok) {
!okDescription
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-6
273 if (sk != NULL)
sk != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
274 sk_CONF_VALUE_free(sk);
never executed: sk_free(((_STACK*) (1 ? (sk) : (struct stack_st_CONF_VALUE*)0)));
0
275 free(v);-
276 v = NULL;-
277 }
never executed: end of block
0
278 return (v);
executed 6 times by 1 test: return (v);
Executed by:
  • libcrypto.so.44.0.1
6
279}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2