Coverage Report

Created: 2026-10-28 06:43

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/knot-dns/src/libknot/wire.h
Line
Count
Source
1
/*  Copyright (C) CZ.NIC, z.s.p.o. and contributors
2
 *  SPDX-License-Identifier: GPL-2.0-or-later
3
 *  For more information, see <https://www.knot-dns.cz/>
4
 */
5
6
/*!
7
 * \file
8
 *
9
 * \brief Wire integer operations.
10
 *
11
 * \addtogroup wire
12
 * @{
13
 */
14
15
#pragma once
16
17
#include <assert.h>
18
#include <stdint.h>
19
#include <string.h>
20
21
#include "libknot/endian.h"
22
23
/*!
24
 * \brief Reads 2 bytes from the wireformat data.
25
 *
26
 * \param pos Data to read the 2 bytes from.
27
 *
28
 * \return The 2 bytes read, in host byte order.
29
 */
30
inline static uint16_t knot_wire_read_u16(const uint8_t *pos)
31
58.7k
{
32
58.7k
  assert(pos);
33
58.7k
  uint16_t result;
34
58.7k
  memcpy(&result, pos, sizeof(result));
35
58.7k
  return be16toh(result);
36
58.7k
}
dname.c:knot_wire_read_u16
Line
Count
Source
31
12.6k
{
32
12.6k
  assert(pos);
33
12.6k
  uint16_t result;
34
12.6k
  memcpy(&result, pos, sizeof(result));
35
  return be16toh(result);
36
12.6k
}
Unexecuted instantiation: fuzz_tsig.c:knot_wire_read_u16
pkt.c:knot_wire_read_u16
Line
Count
Source
31
37.0k
{
32
37.0k
  assert(pos);
33
37.0k
  uint16_t result;
34
37.0k
  memcpy(&result, pos, sizeof(result));
35
  return be16toh(result);
36
37.0k
}
Unexecuted instantiation: rrset-wire.c:knot_wire_read_u16
Unexecuted instantiation: rrset.c:knot_wire_read_u16
Unexecuted instantiation: opt.c:knot_wire_read_u16
tsig.c:knot_wire_read_u16
Line
Count
Source
31
4.81k
{
32
4.81k
  assert(pos);
33
4.81k
  uint16_t result;
34
4.81k
  memcpy(&result, pos, sizeof(result));
35
  return be16toh(result);
36
4.81k
}
tsig-op.c:knot_wire_read_u16
Line
Count
Source
31
4.28k
{
32
4.28k
  assert(pos);
33
4.28k
  uint16_t result;
34
4.28k
  memcpy(&result, pos, sizeof(result));
35
  return be16toh(result);
36
4.28k
}
Unexecuted instantiation: codes.c:knot_wire_read_u16
Unexecuted instantiation: fuzz_packet.c:knot_wire_read_u16
37
38
/*!
39
 * \brief Reads 4 bytes from the wireformat data.
40
 *
41
 * \param pos Data to read the 4 bytes from.
42
 *
43
 * \return The 4 bytes read, in host byte order.
44
 */
45
inline static uint32_t knot_wire_read_u32(const uint8_t *pos)
46
0
{
47
0
  assert(pos);
48
0
  uint32_t result;
49
0
  memcpy(&result, pos, sizeof(result));
50
0
  return be32toh(result);
51
0
}
Unexecuted instantiation: dname.c:knot_wire_read_u32
Unexecuted instantiation: fuzz_tsig.c:knot_wire_read_u32
Unexecuted instantiation: pkt.c:knot_wire_read_u32
Unexecuted instantiation: rrset-wire.c:knot_wire_read_u32
Unexecuted instantiation: rrset.c:knot_wire_read_u32
Unexecuted instantiation: opt.c:knot_wire_read_u32
Unexecuted instantiation: tsig.c:knot_wire_read_u32
Unexecuted instantiation: tsig-op.c:knot_wire_read_u32
Unexecuted instantiation: codes.c:knot_wire_read_u32
Unexecuted instantiation: fuzz_packet.c:knot_wire_read_u32
52
53
/*!
54
 * \brief Reads 6 bytes from the wireformat data.
55
 *
56
 * \param pos Data to read the 6 bytes from.
57
 *
58
 * \return The 6 bytes read, in host byte order.
59
 */
60
inline static uint64_t knot_wire_read_u48(const uint8_t *pos)
61
2.62k
{
62
2.62k
  assert(pos);
63
2.62k
  uint64_t input = 0;
64
2.62k
  memcpy((uint8_t *)&input + 1, pos, 6);
65
2.62k
  return be64toh(input) >> 8;
66
2.62k
}
Unexecuted instantiation: dname.c:knot_wire_read_u48
Unexecuted instantiation: fuzz_tsig.c:knot_wire_read_u48
Unexecuted instantiation: pkt.c:knot_wire_read_u48
Unexecuted instantiation: rrset-wire.c:knot_wire_read_u48
Unexecuted instantiation: rrset.c:knot_wire_read_u48
Unexecuted instantiation: opt.c:knot_wire_read_u48
tsig.c:knot_wire_read_u48
Line
Count
Source
61
2.62k
{
62
2.62k
  assert(pos);
63
2.62k
  uint64_t input = 0;
64
2.62k
  memcpy((uint8_t *)&input + 1, pos, 6);
65
  return be64toh(input) >> 8;
66
2.62k
}
Unexecuted instantiation: tsig-op.c:knot_wire_read_u48
Unexecuted instantiation: codes.c:knot_wire_read_u48
Unexecuted instantiation: fuzz_packet.c:knot_wire_read_u48
67
68
/*!
69
 * \brief Read 8 bytes from the wireformat data.
70
 *
71
 * \param pos Data to read the 8 bytes from.
72
 *
73
 * \return The 8 bytes read, in host byte order.
74
 */
75
inline static uint64_t knot_wire_read_u64(const uint8_t *pos)
76
0
{
77
0
  assert(pos);
78
0
  uint64_t result;
79
0
  memcpy(&result, pos, sizeof(result));
80
0
  return be64toh(result);
81
0
}
Unexecuted instantiation: dname.c:knot_wire_read_u64
Unexecuted instantiation: fuzz_tsig.c:knot_wire_read_u64
Unexecuted instantiation: pkt.c:knot_wire_read_u64
Unexecuted instantiation: rrset-wire.c:knot_wire_read_u64
Unexecuted instantiation: rrset.c:knot_wire_read_u64
Unexecuted instantiation: opt.c:knot_wire_read_u64
Unexecuted instantiation: tsig.c:knot_wire_read_u64
Unexecuted instantiation: tsig-op.c:knot_wire_read_u64
Unexecuted instantiation: codes.c:knot_wire_read_u64
Unexecuted instantiation: fuzz_packet.c:knot_wire_read_u64
82
83
/*!
84
 * \brief Writes 2 bytes in wireformat.
85
 *
86
 * The data are stored in network byte order (big endian).
87
 *
88
 * \param pos Position where to put the 2 bytes.
89
 * \param data Data to put.
90
 */
91
inline static void knot_wire_write_u16(uint8_t *pos, uint16_t data)
92
27.8k
{
93
27.8k
  assert(pos);
94
27.8k
  uint16_t beval = htobe16(data);
95
27.8k
  memcpy(pos, &beval, sizeof(beval));
96
27.8k
}
Unexecuted instantiation: dname.c:knot_wire_write_u16
Unexecuted instantiation: fuzz_tsig.c:knot_wire_write_u16
pkt.c:knot_wire_write_u16
Line
Count
Source
92
4.83k
{
93
4.83k
  assert(pos);
94
4.83k
  uint16_t beval = htobe16(data);
95
4.83k
  memcpy(pos, &beval, sizeof(beval));
96
4.83k
}
rrset-wire.c:knot_wire_write_u16
Line
Count
Source
92
4.61k
{
93
4.61k
  assert(pos);
94
4.61k
  uint16_t beval = htobe16(data);
95
4.61k
  memcpy(pos, &beval, sizeof(beval));
96
4.61k
}
Unexecuted instantiation: rrset.c:knot_wire_write_u16
Unexecuted instantiation: opt.c:knot_wire_write_u16
tsig.c:knot_wire_write_u16
Line
Count
Source
92
10.7k
{
93
10.7k
  assert(pos);
94
10.7k
  uint16_t beval = htobe16(data);
95
10.7k
  memcpy(pos, &beval, sizeof(beval));
96
10.7k
}
tsig-op.c:knot_wire_write_u16
Line
Count
Source
92
7.65k
{
93
7.65k
  assert(pos);
94
7.65k
  uint16_t beval = htobe16(data);
95
7.65k
  memcpy(pos, &beval, sizeof(beval));
96
7.65k
}
Unexecuted instantiation: codes.c:knot_wire_write_u16
Unexecuted instantiation: fuzz_packet.c:knot_wire_write_u16
97
98
/*!
99
 * \brief Writes 4 bytes in wireformat.
100
 *
101
 * The data are stored in network byte order (big endian).
102
 *
103
 * \param pos Position where to put the 4 bytes.
104
 * \param data Data to put.
105
 */
106
inline static void knot_wire_write_u32(uint8_t *pos, uint32_t data)
107
869
{
108
869
  assert(pos);
109
869
  uint32_t beval = htobe32(data);
110
869
  memcpy(pos, &beval, sizeof(beval));
111
869
}
Unexecuted instantiation: dname.c:knot_wire_write_u32
Unexecuted instantiation: fuzz_tsig.c:knot_wire_write_u32
Unexecuted instantiation: pkt.c:knot_wire_write_u32
Unexecuted instantiation: rrset-wire.c:knot_wire_write_u32
Unexecuted instantiation: rrset.c:knot_wire_write_u32
Unexecuted instantiation: opt.c:knot_wire_write_u32
Unexecuted instantiation: tsig.c:knot_wire_write_u32
tsig-op.c:knot_wire_write_u32
Line
Count
Source
107
869
{
108
869
  assert(pos);
109
869
  uint32_t beval = htobe32(data);
110
869
  memcpy(pos, &beval, sizeof(beval));
111
869
}
Unexecuted instantiation: codes.c:knot_wire_write_u32
Unexecuted instantiation: fuzz_packet.c:knot_wire_write_u32
112
113
/*!
114
 * \brief Writes 6 bytes in wireformat.
115
 *
116
 * The data are stored in network byte order (big endian).
117
 *
118
 * \param pos Position where to put the 4 bytes.
119
 * \param data Data to put.
120
 */
121
inline static void knot_wire_write_u48(uint8_t *pos, uint64_t data)
122
4.08k
{
123
4.08k
  assert(pos);
124
4.08k
  uint64_t swapped = htobe64(data << 8);
125
4.08k
  memcpy(pos, (uint8_t *)&swapped + 1, 6);
126
4.08k
}
Unexecuted instantiation: dname.c:knot_wire_write_u48
Unexecuted instantiation: fuzz_tsig.c:knot_wire_write_u48
Unexecuted instantiation: pkt.c:knot_wire_write_u48
Unexecuted instantiation: rrset-wire.c:knot_wire_write_u48
Unexecuted instantiation: rrset.c:knot_wire_write_u48
Unexecuted instantiation: opt.c:knot_wire_write_u48
tsig.c:knot_wire_write_u48
Line
Count
Source
122
2.14k
{
123
2.14k
  assert(pos);
124
2.14k
  uint64_t swapped = htobe64(data << 8);
125
2.14k
  memcpy(pos, (uint8_t *)&swapped + 1, 6);
126
2.14k
}
tsig-op.c:knot_wire_write_u48
Line
Count
Source
122
1.94k
{
123
1.94k
  assert(pos);
124
1.94k
  uint64_t swapped = htobe64(data << 8);
125
1.94k
  memcpy(pos, (uint8_t *)&swapped + 1, 6);
126
1.94k
}
Unexecuted instantiation: codes.c:knot_wire_write_u48
Unexecuted instantiation: fuzz_packet.c:knot_wire_write_u48
127
128
/*!
129
 * \brief Writes 8 bytes in wireformat.
130
 *
131
 * The data are stored in network byte order (big endian).
132
 *
133
 * \param pos Position where to put the 8 bytes.
134
 * \param data Data to put.
135
 */
136
inline static void knot_wire_write_u64(uint8_t *pos, uint64_t data)
137
0
{
138
0
  assert(pos);
139
0
  uint64_t beval = htobe64(data);
140
0
  memcpy(pos, &beval, sizeof(beval));
141
0
}
Unexecuted instantiation: dname.c:knot_wire_write_u64
Unexecuted instantiation: fuzz_tsig.c:knot_wire_write_u64
Unexecuted instantiation: pkt.c:knot_wire_write_u64
Unexecuted instantiation: rrset-wire.c:knot_wire_write_u64
Unexecuted instantiation: rrset.c:knot_wire_write_u64
Unexecuted instantiation: opt.c:knot_wire_write_u64
Unexecuted instantiation: tsig.c:knot_wire_write_u64
Unexecuted instantiation: tsig-op.c:knot_wire_write_u64
Unexecuted instantiation: codes.c:knot_wire_write_u64
Unexecuted instantiation: fuzz_packet.c:knot_wire_write_u64
142
143
/*! @} */