Coverage Report

Created: 2025-11-14 07:32

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/xz/src/liblzma/check/check.c
Line
Count
Source
1
// SPDX-License-Identifier: 0BSD
2
3
///////////////////////////////////////////////////////////////////////////////
4
//
5
/// \file       check.c
6
/// \brief      Single API to access different integrity checks
7
//
8
//  Author:     Lasse Collin
9
//
10
///////////////////////////////////////////////////////////////////////////////
11
12
#include "check.h"
13
14
15
extern LZMA_API(lzma_bool)
16
lzma_check_is_supported(lzma_check type)
17
2.56k
{
18
2.56k
  if ((unsigned int)(type) > LZMA_CHECK_ID_MAX)
19
0
    return false;
20
21
2.56k
  static const lzma_bool available_checks[LZMA_CHECK_ID_MAX + 1] = {
22
2.56k
    true,   // LZMA_CHECK_NONE
23
24
2.56k
#ifdef HAVE_CHECK_CRC32
25
2.56k
    true,
26
#else
27
    false,
28
#endif
29
30
2.56k
    false,  // Reserved
31
2.56k
    false,  // Reserved
32
33
2.56k
#ifdef HAVE_CHECK_CRC64
34
2.56k
    true,
35
#else
36
    false,
37
#endif
38
39
2.56k
    false,  // Reserved
40
2.56k
    false,  // Reserved
41
2.56k
    false,  // Reserved
42
2.56k
    false,  // Reserved
43
2.56k
    false,  // Reserved
44
45
2.56k
#ifdef HAVE_CHECK_SHA256
46
2.56k
    true,
47
#else
48
    false,
49
#endif
50
51
2.56k
    false,  // Reserved
52
2.56k
    false,  // Reserved
53
2.56k
    false,  // Reserved
54
2.56k
    false,  // Reserved
55
2.56k
    false,  // Reserved
56
2.56k
  };
57
58
2.56k
  return available_checks[(unsigned int)(type)];
59
2.56k
}
60
61
62
extern LZMA_API(uint32_t)
63
lzma_check_size(lzma_check type)
64
47.3k
{
65
47.3k
  if ((unsigned int)(type) > LZMA_CHECK_ID_MAX)
66
0
    return UINT32_MAX;
67
68
  // See file-format.txt section 2.1.1.2.
69
47.3k
  static const uint8_t check_sizes[LZMA_CHECK_ID_MAX + 1] = {
70
47.3k
    0,
71
47.3k
    4, 4, 4,
72
47.3k
    8, 8, 8,
73
47.3k
    16, 16, 16,
74
47.3k
    32, 32, 32,
75
47.3k
    64, 64, 64
76
47.3k
  };
77
78
47.3k
  return check_sizes[(unsigned int)(type)];
79
47.3k
}
80
81
82
extern void
83
lzma_check_init(lzma_check_state *check, lzma_check type)
84
107k
{
85
107k
  switch (type) {
86
3.37k
  case LZMA_CHECK_NONE:
87
3.37k
    break;
88
89
0
#ifdef HAVE_CHECK_CRC32
90
12.2k
  case LZMA_CHECK_CRC32:
91
12.2k
    check->state.crc32 = 0;
92
12.2k
    break;
93
0
#endif
94
95
0
#ifdef HAVE_CHECK_CRC64
96
7.21k
  case LZMA_CHECK_CRC64:
97
7.21k
    check->state.crc64 = 0;
98
7.21k
    break;
99
0
#endif
100
101
0
#ifdef HAVE_CHECK_SHA256
102
77.9k
  case LZMA_CHECK_SHA256:
103
77.9k
    lzma_sha256_init(check);
104
77.9k
    break;
105
0
#endif
106
107
6.34k
  default:
108
6.34k
    break;
109
107k
  }
110
111
107k
  return;
112
107k
}
113
114
115
extern void
116
lzma_check_update(lzma_check_state *check, lzma_check type,
117
    const uint8_t *buf, size_t size)
118
292k
{
119
292k
  switch (type) {
120
0
#ifdef HAVE_CHECK_CRC32
121
25.6k
  case LZMA_CHECK_CRC32:
122
25.6k
    check->state.crc32 = lzma_crc32(buf, size, check->state.crc32);
123
25.6k
    break;
124
0
#endif
125
126
0
#ifdef HAVE_CHECK_CRC64
127
15.5k
  case LZMA_CHECK_CRC64:
128
15.5k
    check->state.crc64 = lzma_crc64(buf, size, check->state.crc64);
129
15.5k
    break;
130
0
#endif
131
132
0
#ifdef HAVE_CHECK_SHA256
133
15.9k
  case LZMA_CHECK_SHA256:
134
15.9k
    lzma_sha256_update(buf, size, check);
135
15.9k
    break;
136
0
#endif
137
138
235k
  default:
139
235k
    break;
140
292k
  }
141
142
292k
  return;
143
292k
}
144
145
146
extern void
147
lzma_check_finish(lzma_check_state *check, lzma_check type)
148
3.70k
{
149
3.70k
  switch (type) {
150
0
#ifdef HAVE_CHECK_CRC32
151
180
  case LZMA_CHECK_CRC32:
152
180
    check->buffer.u32[0] = conv32le(check->state.crc32);
153
180
    break;
154
0
#endif
155
156
0
#ifdef HAVE_CHECK_CRC64
157
176
  case LZMA_CHECK_CRC64:
158
176
    check->buffer.u64[0] = conv64le(check->state.crc64);
159
176
    break;
160
0
#endif
161
162
0
#ifdef HAVE_CHECK_SHA256
163
1.10k
  case LZMA_CHECK_SHA256:
164
1.10k
    lzma_sha256_finish(check);
165
1.10k
    break;
166
0
#endif
167
168
2.24k
  default:
169
2.24k
    break;
170
3.70k
  }
171
172
3.70k
  return;
173
3.70k
}