OpenCoverage

bss_file.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/bio/bss_file.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: bss_file.c,v 1.33 2018/05/30 00:23:04 tb 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/*-
60 * 03-Dec-1997 rdenny@dc3.com Fix bug preventing use of stdin/stdout-
61 * with binary data (e.g. asn1parse -inform DER < xxx) under-
62 * Windows-
63 */-
64-
65#ifndef HEADER_BSS_FILE_C-
66#define HEADER_BSS_FILE_C-
67-
68#if defined(__linux) || defined(__sun) || defined(__hpux)-
69/* Following definition aliases fopen to fopen64 on above mentioned-
70 * platforms. This makes it possible to open and sequentially access-
71 * files larger than 2GB from 32-bit application. It does not allow to-
72 * traverse them beyond 2GB with fseek/ftell, but on the other hand *no*-
73 * 32-bit platform permits that, not with fseek/ftell. Not to mention-
74 * that breaking 2GB limit for seeking would require surgery to *our*-
75 * API. But sequential access suffices for practical cases when you-
76 * can run into large files, such as fingerprinting, so we can let API-
77 * alone. For reference, the list of 32-bit platforms which allow for-
78 * sequential access of large files without extra "magic" comprise *BSD,-
79 * Darwin, IRIX...-
80 */-
81#ifndef _FILE_OFFSET_BITS-
82#define _FILE_OFFSET_BITS 64-
83#endif-
84#endif-
85-
86#include <errno.h>-
87#include <stdio.h>-
88#include <string.h>-
89-
90#include <openssl/bio.h>-
91#include <openssl/err.h>-
92-
93static int file_write(BIO *h, const char *buf, int num);-
94static int file_read(BIO *h, char *buf, int size);-
95static int file_puts(BIO *h, const char *str);-
96static int file_gets(BIO *h, char *str, int size);-
97static long file_ctrl(BIO *h, int cmd, long arg1, void *arg2);-
98static int file_new(BIO *h);-
99static int file_free(BIO *data);-
100-
101static const BIO_METHOD methods_filep = {-
102 .type = BIO_TYPE_FILE,-
103 .name = "FILE pointer",-
104 .bwrite = file_write,-
105 .bread = file_read,-
106 .bputs = file_puts,-
107 .bgets = file_gets,-
108 .ctrl = file_ctrl,-
109 .create = file_new,-
110 .destroy = file_free-
111};-
112-
113BIO *-
114BIO_new_file(const char *filename, const char *mode)-
115{-
116 BIO *ret;-
117 FILE *file = NULL;-
118-
119 file = fopen(filename, mode);-
120-
121 if (file == NULL) {
file == ((void *)0)Description
TRUEevaluated 234 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • ssltest
FALSEevaluated 23 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • ssltest
23-234
122 SYSerror(errno);-
123 ERR_asprintf_error_data("fopen('%s', '%s')", filename, mode);-
124 if (errno == ENOENT)
(*__errno_location ()) == 2Description
TRUEevaluated 234 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • ssltest
FALSEnever evaluated
0-234
125 BIOerror(BIO_R_NO_SUCH_FILE);
executed 234 times by 2 tests: ERR_put_error(32,(0xfff),(128),__FILE__,125);
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
234
126 else-
127 BIOerror(ERR_R_SYS_LIB);
never executed: ERR_put_error(32,(0xfff),(2),__FILE__,127);
0
128 return (NULL);
executed 234 times by 2 tests: return ( ((void *)0) );
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
234
129 }-
130 if ((ret = BIO_new(BIO_s_file())) == NULL) {
(ret = BIO_new...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 23 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • ssltest
0-23
131 fclose(file);-
132 return (NULL);
never executed: return ( ((void *)0) );
0
133 }-
134-
135 BIO_set_fp(ret, file, BIO_CLOSE);-
136 return (ret);
executed 23 times by 2 tests: return (ret);
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
23
137}-
138-
139BIO *-
140BIO_new_fp(FILE *stream, int close_flag)-
141{-
142 BIO *ret;-
143-
144 if ((ret = BIO_new(BIO_s_file())) == NULL)
(ret = BIO_new...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 322 times by 7 tests
Evaluated by:
  • asn1test
  • bnaddsub
  • dsatest
  • ecdsatest
  • gost2814789t
  • libcrypto.so.44.0.1
  • ssltest
0-322
145 return (NULL);
never executed: return ( ((void *)0) );
0
146-
147 BIO_set_fp(ret, stream, close_flag);-
148 return (ret);
executed 322 times by 7 tests: return (ret);
Executed by:
  • asn1test
  • bnaddsub
  • dsatest
  • ecdsatest
  • gost2814789t
  • libcrypto.so.44.0.1
  • ssltest
322
149}-
150-
151const BIO_METHOD *-
152BIO_s_file(void)-
153{-
154 return (&methods_filep);
executed 948 times by 13 tests: return (&methods_filep);
Executed by:
  • asn1test
  • bnaddsub
  • bntest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • exptest
  • gost2814789t
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
948
155}-
156-
157static int-
158file_new(BIO *bi)-
159{-
160 bi->init = 0;-
161 bi->num = 0;-
162 bi->ptr = NULL;-
163 bi->flags=0;-
164 return (1);
executed 948 times by 13 tests: return (1);
Executed by:
  • asn1test
  • bnaddsub
  • bntest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • exptest
  • gost2814789t
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
948
165}-
166-
167static int-
168file_free(BIO *a)-
169{-
170 if (a == NULL)
a == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1891 times by 13 tests
Evaluated by:
  • asn1test
  • bnaddsub
  • bntest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • exptest
  • gost2814789t
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
0-1891
171 return (0);
never executed: return (0);
0
172 if (a->shutdown) {
a->shutdownDescription
TRUEevaluated 1098 times by 13 tests
Evaluated by:
  • asn1test
  • bnaddsub
  • bntest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • exptest
  • gost2814789t
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
FALSEevaluated 793 times by 10 tests
Evaluated by:
  • bntest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • exptest
  • gost2814789t
  • libcrypto.so.44.0.1
  • ssltest
793-1098
173 if ((a->init) && (a->ptr != NULL)) {
(a->init)Description
TRUEevaluated 150 times by 3 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
FALSEevaluated 948 times by 13 tests
Evaluated by:
  • asn1test
  • bnaddsub
  • bntest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • exptest
  • gost2814789t
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
(a->ptr != ((void *)0) )Description
TRUEevaluated 150 times by 3 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
FALSEnever evaluated
0-948
174 fclose (a->ptr);-
175 a->ptr = NULL;-
176 a->flags = 0;-
177 }
executed 150 times by 3 tests: end of block
Executed by:
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
150
178 a->init = 0;-
179 }
executed 1098 times by 13 tests: end of block
Executed by:
  • asn1test
  • bnaddsub
  • bntest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • exptest
  • gost2814789t
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
1098
180 return (1);
executed 1891 times by 13 tests: return (1);
Executed by:
  • asn1test
  • bnaddsub
  • bntest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • exptest
  • gost2814789t
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
1891
181}-
182-
183static int-
184file_read(BIO *b, char *out, int outl)-
185{-
186 int ret = 0;-
187-
188 if (b->init && out != NULL) {
b->initDescription
TRUEevaluated 548 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEnever evaluated
out != ((void *)0)Description
TRUEevaluated 548 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEnever evaluated
0-548
189 ret = fread(out, 1, outl, (FILE *)b->ptr);-
190 if (ret == 0 && ferror((FILE *)b->ptr)) {
ret == 0Description
TRUEevaluated 200 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 348 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
ferror((FILE *)b->ptr)Description
TRUEnever evaluated
FALSEevaluated 200 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-348
191 SYSerror(errno);-
192 BIOerror(ERR_R_SYS_LIB);-
193 ret = -1;-
194 }
never executed: end of block
0
195 }
executed 548 times by 1 test: end of block
Executed by:
  • libcrypto.so.44.0.1
548
196 return (ret);
executed 548 times by 1 test: return (ret);
Executed by:
  • libcrypto.so.44.0.1
548
197}-
198-
199static int-
200file_write(BIO *b, const char *in, int inl)-
201{-
202 int ret = 0;-
203-
204 if (b->init && in != NULL)
b->initDescription
TRUEevaluated 805250 times by 8 tests
Evaluated by:
  • bntest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • libcrypto.so.44.0.1
  • ssltest
FALSEnever evaluated
in != ((void *)0)Description
TRUEevaluated 805250 times by 8 tests
Evaluated by:
  • bntest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • libcrypto.so.44.0.1
  • ssltest
FALSEnever evaluated
0-805250
205 ret = fwrite(in, 1, inl, (FILE *)b->ptr);
executed 805250 times by 8 tests: ret = fwrite(in, 1, inl, (FILE *)b->ptr);
Executed by:
  • bntest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • libcrypto.so.44.0.1
  • ssltest
805250
206 return (ret);
executed 805250 times by 8 tests: return (ret);
Executed by:
  • bntest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • libcrypto.so.44.0.1
  • ssltest
805250
207}-
208-
209static long-
210file_ctrl(BIO *b, int cmd, long num, void *ptr)-
211{-
212 long ret = 1;-
213 FILE *fp = (FILE *)b->ptr;-
214 FILE **fpp;-
215 char p[4];-
216-
217 switch (cmd) {-
218 case BIO_C_FILE_SEEK:
never executed: case 128:
0
219 case BIO_CTRL_RESET:
never executed: case 1:
0
220 ret = (long)fseek(fp, num, 0);-
221 break;
never executed: break;
0
222 case BIO_CTRL_EOF:
never executed: case 2:
0
223 ret = (long)feof(fp);-
224 break;
never executed: break;
0
225 case BIO_C_FILE_TELL:
never executed: case 133:
0
226 case BIO_CTRL_INFO:
never executed: case 3:
0
227 ret = ftell(fp);-
228 break;
never executed: break;
0
229 case BIO_C_SET_FILE_PTR:
executed 820 times by 12 tests: case 106:
Executed by:
  • asn1test
  • bnaddsub
  • bntest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • exptest
  • gost2814789t
  • libcrypto.so.44.0.1
  • ssltest
820
230 file_free(b);-
231 b->shutdown = (int)num&BIO_CLOSE;-
232 b->ptr = ptr;-
233 b->init = 1;-
234 break;
executed 820 times by 12 tests: break;
Executed by:
  • asn1test
  • bnaddsub
  • bntest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • exptest
  • gost2814789t
  • libcrypto.so.44.0.1
  • ssltest
820
235 case BIO_C_SET_FILENAME:
executed 127 times by 3 tests: case 108:
Executed by:
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
127
236 file_free(b);-
237 b->shutdown = (int)num&BIO_CLOSE;-
238 if (num & BIO_FP_APPEND) {
num & 0x08Description
TRUEnever evaluated
FALSEevaluated 127 times by 3 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
0-127
239 if (num & BIO_FP_READ)
num & 0x02Description
TRUEnever evaluated
FALSEnever evaluated
0
240 strlcpy(p, "a+", sizeof p);
never executed: strlcpy(p, "a+", sizeof p);
0
241 else strlcpy(p, "a", sizeof p);
never executed: strlcpy(p, "a", sizeof p);
0
242 } else if ((num & BIO_FP_READ) && (num & BIO_FP_WRITE))
(num & 0x02)Description
TRUEevaluated 122 times by 3 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
FALSEevaluated 5 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
(num & 0x04)Description
TRUEnever evaluated
FALSEevaluated 122 times by 3 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
0-122
243 strlcpy(p, "r+", sizeof p);
never executed: strlcpy(p, "r+", sizeof p);
0
244 else if (num & BIO_FP_WRITE)
num & 0x04Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 122 times by 3 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
5-122
245 strlcpy(p, "w", sizeof p);
executed 5 times by 1 test: strlcpy(p, "w", sizeof p);
Executed by:
  • libcrypto.so.44.0.1
5
246 else if (num & BIO_FP_READ)
num & 0x02Description
TRUEevaluated 122 times by 3 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
FALSEnever evaluated
0-122
247 strlcpy(p, "r", sizeof p);
executed 122 times by 3 tests: strlcpy(p, "r", sizeof p);
Executed by:
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
122
248 else {-
249 BIOerror(BIO_R_BAD_FOPEN_MODE);-
250 ret = 0;-
251 break;
never executed: break;
0
252 }-
253 fp = fopen(ptr, p);-
254 if (fp == NULL) {
fp == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 127 times by 3 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
0-127
255 SYSerror(errno);-
256 ERR_asprintf_error_data("fopen('%s', '%s')", ptr, p);-
257 BIOerror(ERR_R_SYS_LIB);-
258 ret = 0;-
259 break;
never executed: break;
0
260 }-
261 b->ptr = fp;-
262 b->init = 1;-
263 break;
executed 127 times by 3 tests: break;
Executed by:
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
127
264 case BIO_C_GET_FILE_PTR:
never executed: case 107:
0
265 /* the ptr parameter is actually a FILE ** in this case. */-
266 if (ptr != NULL) {
ptr != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
267 fpp = (FILE **)ptr;-
268 *fpp = (FILE *)b->ptr;-
269 }
never executed: end of block
0
270 break;
never executed: break;
0
271 case BIO_CTRL_GET_CLOSE:
never executed: case 8:
0
272 ret = (long)b->shutdown;-
273 break;
never executed: break;
0
274 case BIO_CTRL_SET_CLOSE:
never executed: case 9:
0
275 b->shutdown = (int)num;-
276 break;
never executed: break;
0
277 case BIO_CTRL_FLUSH:
executed 1736 times by 7 tests: case 11:
Executed by:
  • bntest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • gost2814789t
  • libcrypto.so.44.0.1
1736
278 fflush((FILE *)b->ptr);-
279 break;
executed 1736 times by 7 tests: break;
Executed by:
  • bntest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • gost2814789t
  • libcrypto.so.44.0.1
1736
280 case BIO_CTRL_DUP:
never executed: case 12:
0
281 ret = 1;-
282 break;
never executed: break;
0
283-
284 case BIO_CTRL_WPENDING:
never executed: case 13:
0
285 case BIO_CTRL_PENDING:
never executed: case 10:
0
286 case BIO_CTRL_PUSH:
executed 296 times by 1 test: case 6:
Executed by:
  • libcrypto.so.44.0.1
296
287 case BIO_CTRL_POP:
never executed: case 7:
0
288 default:
never executed: default:
0
289 ret = 0;-
290 break;
executed 296 times by 1 test: break;
Executed by:
  • libcrypto.so.44.0.1
296
291 }-
292 return (ret);
executed 2979 times by 13 tests: return (ret);
Executed by:
  • asn1test
  • bnaddsub
  • bntest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • exptest
  • gost2814789t
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
2979
293}-
294-
295static int-
296file_gets(BIO *bp, char *buf, int size)-
297{-
298 int ret = 0;-
299-
300 buf[0] = '\0';-
301 if (!fgets(buf, size,(FILE *)bp->ptr))
!fgets(buf, si...ILE *)bp->ptr)Description
TRUEevaluated 22 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • ssltest
FALSEevaluated 5473 times by 3 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
22-5473
302 goto err;
executed 22 times by 2 tests: goto err;
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
22
303 if (buf[0] != '\0')
buf[0] != '\0'Description
TRUEevaluated 5473 times by 3 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
FALSEnever evaluated
0-5473
304 ret = strlen(buf);
executed 5473 times by 3 tests: ret = strlen(buf);
Executed by:
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
5473
305err:
code before this statement executed 5473 times by 3 tests: err:
Executed by:
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
5473
306 return (ret);
executed 5495 times by 3 tests: return (ret);
Executed by:
  • libcrypto.so.44.0.1
  • servertest
  • ssltest
5495
307}-
308-
309static int-
310file_puts(BIO *bp, const char *str)-
311{-
312 int n, ret;-
313-
314 n = strlen(str);-
315 ret = file_write(bp, str, n);-
316 return (ret);
executed 9012 times by 5 tests: return (ret);
Executed by:
  • bntest
  • dhtest
  • dsatest
  • ecdhtest
  • libcrypto.so.44.0.1
9012
317}-
318-
319-
320#endif /* HEADER_BSS_FILE_C */-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2