OpenCoverage

dso_dlfcn.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/dso/dso_dlfcn.c
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6-
7-
8-
9static int dlfcn_load(DSO *dso);-
10static int dlfcn_unload(DSO *dso);-
11static DSO_FUNC_TYPE dlfcn_bind_func(DSO *dso, const char *symname);-
12static char *dlfcn_name_converter(DSO *dso, const char *filename);-
13static char *dlfcn_merger(DSO *dso, const char *filespec1,-
14 const char *filespec2);-
15static int dlfcn_pathbyaddr(void *addr, char *path, int sz);-
16static void *dlfcn_globallookup(const char *name);-
17-
18static DSO_METHOD dso_meth_dlfcn = {-
19 "OpenSSL 'dlfcn' shared library method",-
20 dlfcn_load,-
21 dlfcn_unload,-
22 dlfcn_bind_func,-
23 -
24 ((void *)0)-
25 ,-
26 dlfcn_name_converter,-
27 dlfcn_merger,-
28 -
29 ((void *)0)-
30 ,-
31 -
32 ((void *)0)-
33 ,-
34 dlfcn_pathbyaddr,-
35 dlfcn_globallookup-
36};-
37-
38DSO_METHOD *DSO_METHOD_openssl(void)-
39{-
40 return
executed 368 times by 1 test: return &dso_meth_dlfcn;
Executed by:
  • libcrypto.so.1.1
&dso_meth_dlfcn;
executed 368 times by 1 test: return &dso_meth_dlfcn;
Executed by:
  • libcrypto.so.1.1
368
41}-
42static int dlfcn_load(DSO *dso)-
43{-
44 void *ptr = -
45 ((void *)0)-
46 ;-
47-
48 char *filename = DSO_convert_filename(dso, -
49 ((void *)0)-
50 );-
51 int flags = -
52 0x00002-
53 ;-
54-
55 if (filename ==
filename == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-368
56 ((void *)0)
filename == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-368
57 ) {-
58 ERR_put_error(37,(102),(111),__FILE__,104);-
59 goto
never executed: goto err;
err;
never executed: goto err;
0
60 }-
61-
62 if (dso->flags & 0x20
dso->flags & 0x20Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-368
63 flags |=
never executed: flags |= 0x00100 ;
0
64 0x00100
never executed: flags |= 0x00100 ;
0
65 ;
never executed: flags |= 0x00100 ;
0
66-
67-
68-
69-
70-
71 ptr = dlopen(filename, flags);-
72 if (ptr ==
ptr == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-368
73 ((void *)0)
ptr == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-368
74 ) {-
75 ERR_put_error(37,(102),(103),__FILE__,117);-
76 ERR_add_error_data(4, "filename(", filename, "): ", dlerror());-
77 goto
never executed: goto err;
err;
never executed: goto err;
0
78 }-
79 if (!sk_void_push(dso->meth_data, (char *)ptr)
!sk_void_push(..., (char *)ptr)Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
) {
0-368
80 ERR_put_error(37,(102),(105),__FILE__,122);-
81 goto
never executed: goto err;
err;
never executed: goto err;
0
82 }-
83-
84 dso->loaded_filename = filename;-
85 return
executed 368 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
1;
executed 368 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
368
86 err:-
87-
88 CRYPTO_free(filename, __FILE__, 130);-
89 if (ptr !=
ptr != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
90 ((void *)0)
ptr != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
91 )-
92 dlclose(ptr);
never executed: dlclose(ptr);
0
93 return
never executed: return 0;
0;
never executed: return 0;
0
94}-
95-
96static int dlfcn_unload(DSO *dso)-
97{-
98 void *ptr;-
99 if (dso ==
dso == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-368
100 ((void *)0)
dso == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-368
101 ) {-
102 ERR_put_error(37,(103),((3|64)),__FILE__,140);-
103 return
never executed: return 0;
0;
never executed: return 0;
0
104 }-
105 if (sk_void_num(dso->meth_data) < 1
sk_void_num(ds...meth_data) < 1Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-368
106 return
never executed: return 1;
1;
never executed: return 1;
0
107 ptr = sk_void_pop(dso->meth_data);-
108 if (ptr ==
ptr == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-368
109 ((void *)0)
ptr == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-368
110 ) {-
111 ERR_put_error(37,(103),(104),__FILE__,147);-
112-
113-
114-
115 sk_void_push(dso->meth_data, ptr);-
116 return
never executed: return 0;
0;
never executed: return 0;
0
117 }-
118-
119 dlclose(ptr);-
120 return
executed 368 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
1;
executed 368 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
368
121}-
122-
123static DSO_FUNC_TYPE dlfcn_bind_func(DSO *dso, const char *symname)-
124{-
125 void *ptr;-
126 union {-
127 DSO_FUNC_TYPE sym;-
128 void *dlret;-
129 } u;-
130-
131 if ((
(dso == ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 736 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
dso ==
(dso == ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 736 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-736
132 ((void *)0)
(dso == ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 736 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-736
133 )
(dso == ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 736 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
|| (
(symname == ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 736 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
symname ==
(symname == ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 736 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-736
134 ((void *)0)
(symname == ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 736 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-736
135 )
(symname == ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 736 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
) {
0-736
136 ERR_put_error(37,(100),((3|64)),__FILE__,168);-
137 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
138 ((void *)0)
never executed: return ((void *)0) ;
0
139 ;
never executed: return ((void *)0) ;
0
140 }-
141 if (sk_void_num(dso->meth_data) < 1
sk_void_num(ds...meth_data) < 1Description
TRUEnever evaluated
FALSEevaluated 736 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
) {
0-736
142 ERR_put_error(37,(100),(105),__FILE__,172);-
143 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
144 ((void *)0)
never executed: return ((void *)0) ;
0
145 ;
never executed: return ((void *)0) ;
0
146 }-
147 ptr = sk_void_value(dso->meth_data, sk_void_num(dso->meth_data) - 1);-
148 if (ptr ==
ptr == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 736 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-736
149 ((void *)0)
ptr == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 736 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-736
150 ) {-
151 ERR_put_error(37,(100),(104),__FILE__,177);-
152 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
153 ((void *)0)
never executed: return ((void *)0) ;
0
154 ;
never executed: return ((void *)0) ;
0
155 }-
156 u.dlret = dlsym(ptr, symname);-
157 if (u.dlret ==
u.dlret == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 736 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-736
158 ((void *)0)
u.dlret == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 736 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-736
159 ) {-
160 ERR_put_error(37,(100),(106),__FILE__,182);-
161 ERR_add_error_data(4, "symname(", symname, "): ", dlerror());-
162 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
163 ((void *)0)
never executed: return ((void *)0) ;
0
164 ;
never executed: return ((void *)0) ;
0
165 }-
166 return
executed 736 times by 1 test: return u.sym;
Executed by:
  • libcrypto.so.1.1
u.sym;
executed 736 times by 1 test: return u.sym;
Executed by:
  • libcrypto.so.1.1
736
167}-
168-
169static char *dlfcn_merger(DSO *dso, const char *filespec1,-
170 const char *filespec2)-
171{-
172 char *merged;-
173-
174 if (!filespec1
!filespec1Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
&& !filespec2
!filespec2Description
TRUEnever evaluated
FALSEnever evaluated
) {
0-368
175 ERR_put_error(37,(130),((3|64)),__FILE__,195);-
176 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
177 ((void *)0)
never executed: return ((void *)0) ;
0
178 ;
never executed: return ((void *)0) ;
0
179 }-
180-
181-
182-
183-
184 if (!filespec2
!filespec2Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
|| (filespec1 !=
filespec1 != ((void *)0)Description
TRUEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-368
185 ((void *)0)
filespec1 != ((void *)0)Description
TRUEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-368
186 && filespec1[0] == '/'
filespec1[0] == '/'Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)) {
0-368
187 merged = CRYPTO_strdup(filespec1, __FILE__, 203);-
188 if (merged ==
merged == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
189 ((void *)0)
merged == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
190 ) {-
191 ERR_put_error(37,(130),((1|64)),__FILE__,205);-
192 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
193 ((void *)0)
never executed: return ((void *)0) ;
0
194 ;
never executed: return ((void *)0) ;
0
195 }-
196 }
never executed: end of block
0
197-
198-
199-
200 else if (!filespec1
!filespec1Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
) {
0-368
201 merged = CRYPTO_strdup(filespec2, __FILE__, 213);-
202 if (merged ==
merged == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
203 ((void *)0)
merged == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
204 ) {-
205 ERR_put_error(37,(130),((1|64)),__FILE__,215);-
206 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
207 ((void *)0)
never executed: return ((void *)0) ;
0
208 ;
never executed: return ((void *)0) ;
0
209 }-
210 }
never executed: end of block
else {
0
211-
212-
213-
214-
215-
216-
217-
218 int spec2len, len;-
219-
220 spec2len = strlen(filespec2);-
221 len = spec2len + strlen(filespec1);-
222-
223 if (spec2len
spec2lenDescription
TRUEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
&& filespec2[spec2len - 1] == '/'
filespec2[spec2len - 1] == '/'Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
) {
0-368
224 spec2len--;-
225 len--;-
226 }
never executed: end of block
0
227 merged = CRYPTO_malloc(len + 2, __FILE__, 235);-
228 if (merged ==
merged == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-368
229 ((void *)0)
merged == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-368
230 ) {-
231 ERR_put_error(37,(130),((1|64)),__FILE__,237);-
232 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
233 ((void *)0)
never executed: return ((void *)0) ;
0
234 ;
never executed: return ((void *)0) ;
0
235 }-
236 strcpy(merged, filespec2);-
237 merged[spec2len] = '/';-
238 strcpy(&merged[spec2len + 1], filespec1);-
239 }
executed 368 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
368
240 return
executed 368 times by 1 test: return merged;
Executed by:
  • libcrypto.so.1.1
merged;
executed 368 times by 1 test: return merged;
Executed by:
  • libcrypto.so.1.1
368
241}-
242-
243static char *dlfcn_name_converter(DSO *dso, const char *filename)-
244{-
245 char *translated;-
246 int len, rsize, transform;-
247-
248 len = strlen(filename);-
249 rsize = len + 1;-
250 transform = (strstr(filename, "/") == -
251 ((void *)0)-
252 );-
253 if (transform
transformDescription
TRUEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
) {
368
254-
255 rsize += strlen(".so");-
256 if ((
(DSO_flags(dso) & 0x02) == 0Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
DSO_flags(dso) & 0x02) == 0
(DSO_flags(dso) & 0x02) == 0Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-368
257 rsize += 3;
never executed: rsize += 3;
0
258 }
executed 368 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
368
259 translated = CRYPTO_malloc(rsize, __FILE__, 261);-
260 if (translated ==
translated == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 736 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-736
261 ((void *)0)
translated == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 736 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-736
262 ) {-
263 ERR_put_error(37,(123),(109),__FILE__,263);-
264 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
265 ((void *)0)
never executed: return ((void *)0) ;
0
266 ;
never executed: return ((void *)0) ;
0
267 }-
268 if (transform
transformDescription
TRUEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
) {
368
269 if ((
(DSO_flags(dso) & 0x02) == 0Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
DSO_flags(dso) & 0x02) == 0
(DSO_flags(dso) & 0x02) == 0Description
TRUEnever evaluated
FALSEevaluated 368 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
)
0-368
270 sprintf(translated, "lib%s" ".so", filename);
never executed: sprintf(translated, "lib%s" ".so", filename);
0
271 else-
272 sprintf(translated, "%s" ".so", filename);
executed 368 times by 1 test: sprintf(translated, "%s" ".so", filename);
Executed by:
  • libcrypto.so.1.1
368
273 } else-
274 sprintf(translated, "%s", filename);
executed 368 times by 1 test: sprintf(translated, "%s", filename);
Executed by:
  • libcrypto.so.1.1
368
275 return
executed 736 times by 1 test: return translated;
Executed by:
  • libcrypto.so.1.1
translated;
executed 736 times by 1 test: return translated;
Executed by:
  • libcrypto.so.1.1
736
276}-
277static int dlfcn_pathbyaddr(void *addr, char *path, int sz)-
278{-
279-
280 Dl_info dli;-
281 int len;-
282-
283 if (addr ==
addr == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
284 ((void *)0)
addr == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
285 ) {-
286 union {-
287 int (*f) (void *, char *, int);-
288 void *p;-
289 } t = {-
290 dlfcn_pathbyaddr-
291 };-
292 addr = t.p;-
293 }
never executed: end of block
0
294-
295 if (dladdr(addr, &dli)
dladdr(addr, &dli)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
296 len = (int)strlen(dli.dli_fname);-
297 if (sz <= 0
sz <= 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
298-
299-
300-
301 return
never executed: return len + 1;
len + 1;
never executed: return len + 1;
0
302 }-
303 if (len >= sz
len >= szDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
304 len = sz - 1;
never executed: len = sz - 1;
0
305 memcpy(path, dli.dli_fname, len);-
306 path[len++] = 0;-
307-
308-
309-
310 return
never executed: return len;
len;
never executed: return len;
0
311 }-
312-
313 ERR_add_error_data(2, "dlfcn_pathbyaddr(): ", dlerror());-
314-
315 return
never executed: return -1;
-1;
never executed: return -1;
0
316}-
317-
318static void *dlfcn_globallookup(const char *name)-
319{-
320 void *ret = -
321 ((void *)0)-
322 , *handle = dlopen(-
323 ((void *)0)-
324 , -
325 0x00001-
326 );-
327-
328 if (handle
handleDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
329 ret = dlsym(handle, name);-
330 dlclose(handle);-
331 }
never executed: end of block
0
332-
333 return
never executed: return ret;
ret;
never executed: return ret;
0
334}-
Switch to Source codePreprocessed file

Generated by Squish Coco 4.2.2