Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/bio/b_dump.c |
Source code | Switch to Preprocessed file |
Line | Source | Count | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 | /* | - | ||||||||||||
11 | * Stolen from tjh's ssl/ssl_trc.c stuff. | - | ||||||||||||
12 | */ | - | ||||||||||||
13 | - | |||||||||||||
14 | #include <stdio.h> | - | ||||||||||||
15 | #include "bio_lcl.h" | - | ||||||||||||
16 | - | |||||||||||||
17 | #define DUMP_WIDTH 16 | - | ||||||||||||
18 | #define DUMP_WIDTH_LESS_INDENT(i) (DUMP_WIDTH - ((i - (i > 6 ? 6 : i) + 3) / 4)) | - | ||||||||||||
19 | - | |||||||||||||
20 | #define SPACE(buf, pos, n) (sizeof(buf) - (pos) > (n)) | - | ||||||||||||
21 | - | |||||||||||||
22 | int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u), | - | ||||||||||||
23 | void *u, const char *s, int len) | - | ||||||||||||
24 | { | - | ||||||||||||
25 | return BIO_dump_indent_cb(cb, u, s, len, 0); never executed: return BIO_dump_indent_cb(cb, u, s, len, 0); | 0 | ||||||||||||
26 | } | - | ||||||||||||
27 | - | |||||||||||||
28 | int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u), | - | ||||||||||||
29 | void *u, const char *s, int len, int indent) | - | ||||||||||||
30 | { | - | ||||||||||||
31 | int ret = 0; | - | ||||||||||||
32 | char buf[288 + 1]; | - | ||||||||||||
33 | int i, j, rows, n; | - | ||||||||||||
34 | unsigned char ch; | - | ||||||||||||
35 | int dump_width; | - | ||||||||||||
36 | - | |||||||||||||
37 | if (indent < 0)
| 0-4950 | ||||||||||||
38 | indent = 0; never executed: indent = 0; | 0 | ||||||||||||
39 | else if (indent > 128)
| 0-4950 | ||||||||||||
40 | indent = 128; never executed: indent = 128; | 0 | ||||||||||||
41 | - | |||||||||||||
42 | dump_width = DUMP_WIDTH_LESS_INDENT(indent);
| 546-4404 | ||||||||||||
43 | rows = len / dump_width; | - | ||||||||||||
44 | if ((rows * dump_width) < len)
| 576-4374 | ||||||||||||
45 | rows++; executed 4374 times by 1 test: rows++; Executed by:
| 4374 | ||||||||||||
46 | for (i = 0; i < rows; i++) {
| 4950-8186 | ||||||||||||
47 | n = BIO_snprintf(buf, sizeof(buf), "%*s%04x - ", indent, "", | - | ||||||||||||
48 | i * dump_width); | - | ||||||||||||
49 | for (j = 0; j < dump_width; j++) {
| 8186-119998 | ||||||||||||
50 | if (SPACE(buf, n, 3)) {
| 0-119998 | ||||||||||||
51 | if (((i * dump_width) + j) >= len) {
| 44565-75433 | ||||||||||||
52 | strcpy(buf + n, " "); | - | ||||||||||||
53 | } else { executed 44565 times by 1 test: end of block Executed by:
| 44565 | ||||||||||||
54 | ch = ((unsigned char)*(s + i * dump_width + j)) & 0xff; | - | ||||||||||||
55 | BIO_snprintf(buf + n, 4, "%02x%c", ch, | - | ||||||||||||
56 | j == 7 ? '-' : ' '); | - | ||||||||||||
57 | } executed 75433 times by 1 test: end of block Executed by:
| 75433 | ||||||||||||
58 | n += 3; | - | ||||||||||||
59 | } executed 119998 times by 1 test: end of block Executed by:
| 119998 | ||||||||||||
60 | } executed 119998 times by 1 test: end of block Executed by:
| 119998 | ||||||||||||
61 | if (SPACE(buf, n, 2)) {
| 0-8186 | ||||||||||||
62 | strcpy(buf + n, " "); | - | ||||||||||||
63 | n += 2; | - | ||||||||||||
64 | } executed 8186 times by 1 test: end of block Executed by:
| 8186 | ||||||||||||
65 | for (j = 0; j < dump_width; j++) {
| 3812-79807 | ||||||||||||
66 | if (((i * dump_width) + j) >= len)
| 4374-75433 | ||||||||||||
67 | break; executed 4374 times by 1 test: break; Executed by:
| 4374 | ||||||||||||
68 | if (SPACE(buf, n, 1)) {
| 0-75433 | ||||||||||||
69 | ch = ((unsigned char)*(s + i * dump_width + j)) & 0xff; | - | ||||||||||||
70 | #ifndef CHARSET_EBCDIC | - | ||||||||||||
71 | buf[n++] = ((ch >= ' ') && (ch <= '~')) ? ch : '.';
| 18648-40868 | ||||||||||||
72 | #else | - | ||||||||||||
73 | buf[n++] = ((ch >= os_toascii[' ']) && (ch <= os_toascii['~'])) | - | ||||||||||||
74 | ? os_toebcdic[ch] | - | ||||||||||||
75 | : '.'; | - | ||||||||||||
76 | #endif | - | ||||||||||||
77 | buf[n] = '\0'; | - | ||||||||||||
78 | } executed 75433 times by 1 test: end of block Executed by:
| 75433 | ||||||||||||
79 | } executed 75433 times by 1 test: end of block Executed by:
| 75433 | ||||||||||||
80 | if (SPACE(buf, n, 1)) {
| 0-8186 | ||||||||||||
81 | buf[n++] = '\n'; | - | ||||||||||||
82 | buf[n] = '\0'; | - | ||||||||||||
83 | } executed 8186 times by 1 test: end of block Executed by:
| 8186 | ||||||||||||
84 | /* | - | ||||||||||||
85 | * if this is the last call then update the ddt_dump thing so that we | - | ||||||||||||
86 | * will move the selection point in the debug window | - | ||||||||||||
87 | */ | - | ||||||||||||
88 | ret += cb((void *)buf, n, u); | - | ||||||||||||
89 | } executed 8186 times by 1 test: end of block Executed by:
| 8186 | ||||||||||||
90 | return ret; executed 4950 times by 1 test: return ret; Executed by:
| 4950 | ||||||||||||
91 | } | - | ||||||||||||
92 | - | |||||||||||||
93 | #ifndef OPENSSL_NO_STDIO | - | ||||||||||||
94 | static int write_fp(const void *data, size_t len, void *fp) | - | ||||||||||||
95 | { | - | ||||||||||||
96 | return UP_fwrite(data, len, 1, fp); never executed: return fwrite(data, len, 1, fp); | 0 | ||||||||||||
97 | } | - | ||||||||||||
98 | - | |||||||||||||
99 | int BIO_dump_fp(FILE *fp, const char *s, int len) | - | ||||||||||||
100 | { | - | ||||||||||||
101 | return BIO_dump_cb(write_fp, fp, s, len); never executed: return BIO_dump_cb(write_fp, fp, s, len); | 0 | ||||||||||||
102 | } | - | ||||||||||||
103 | - | |||||||||||||
104 | int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent) | - | ||||||||||||
105 | { | - | ||||||||||||
106 | return BIO_dump_indent_cb(write_fp, fp, s, len, indent); never executed: return BIO_dump_indent_cb(write_fp, fp, s, len, indent); | 0 | ||||||||||||
107 | } | - | ||||||||||||
108 | #endif | - | ||||||||||||
109 | - | |||||||||||||
110 | static int write_bio(const void *data, size_t len, void *bp) | - | ||||||||||||
111 | { | - | ||||||||||||
112 | return BIO_write((BIO *)bp, (const char *)data, len); executed 8186 times by 1 test: return BIO_write((BIO *)bp, (const char *)data, len); Executed by:
| 8186 | ||||||||||||
113 | } | - | ||||||||||||
114 | - | |||||||||||||
115 | int BIO_dump(BIO *bp, const char *s, int len) | - | ||||||||||||
116 | { | - | ||||||||||||
117 | return BIO_dump_cb(write_bio, bp, s, len); never executed: return BIO_dump_cb(write_bio, bp, s, len); | 0 | ||||||||||||
118 | } | - | ||||||||||||
119 | - | |||||||||||||
120 | int BIO_dump_indent(BIO *bp, const char *s, int len, int indent) | - | ||||||||||||
121 | { | - | ||||||||||||
122 | return BIO_dump_indent_cb(write_bio, bp, s, len, indent); executed 4950 times by 1 test: return BIO_dump_indent_cb(write_bio, bp, s, len, indent); Executed by:
| 4950 | ||||||||||||
123 | } | - | ||||||||||||
124 | - | |||||||||||||
125 | int BIO_hex_string(BIO *out, int indent, int width, unsigned char *data, | - | ||||||||||||
126 | int datalen) | - | ||||||||||||
127 | { | - | ||||||||||||
128 | int i, j = 0; | - | ||||||||||||
129 | - | |||||||||||||
130 | if (datalen < 1)
| 1599-11530 | ||||||||||||
131 | return 1; executed 1599 times by 1 test: return 1; Executed by:
| 1599 | ||||||||||||
132 | - | |||||||||||||
133 | for (i = 0; i < datalen - 1; i++) {
| 11530-127234 | ||||||||||||
134 | if (i && !j)
| 4148-123086 | ||||||||||||
135 | BIO_printf(out, "%*s", indent, ""); executed 4870 times by 1 test: BIO_printf(out, "%*s", indent, ""); Executed by:
| 4870 | ||||||||||||
136 | - | |||||||||||||
137 | BIO_printf(out, "%02X:", data[i]); | - | ||||||||||||
138 | - | |||||||||||||
139 | j = (j + 1) % width; | - | ||||||||||||
140 | if (!j)
| 5305-121929 | ||||||||||||
141 | BIO_printf(out, "\n"); executed 5305 times by 1 test: BIO_printf(out, "\n"); Executed by:
| 5305 | ||||||||||||
142 | } executed 127234 times by 1 test: end of block Executed by:
| 127234 | ||||||||||||
143 | - | |||||||||||||
144 | if (i && !j)
| 435-7382 | ||||||||||||
145 | BIO_printf(out, "%*s", indent, ""); executed 435 times by 1 test: BIO_printf(out, "%*s", indent, ""); Executed by:
| 435 | ||||||||||||
146 | BIO_printf(out, "%02X", data[datalen - 1]); | - | ||||||||||||
147 | return 1; executed 11530 times by 1 test: return 1; Executed by:
| 11530 | ||||||||||||
148 | } | - | ||||||||||||
Source code | Switch to Preprocessed file |