Coverage Report

Created: 2026-04-20 22:07

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/root/bitcoin/src/test/fuzz/parse_univalue.cpp
Line
Count
Source
1
// Copyright (c) 2009-present The Bitcoin Core developers
2
// Distributed under the MIT software license, see the accompanying
3
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5
#include <chainparams.h>
6
#include <rpc/client.h>
7
#include <rpc/util.h>
8
#include <test/fuzz/fuzz.h>
9
#include <util/chaintype.h>
10
11
#include <limits>
12
#include <string>
13
14
void initialize_parse_univalue()
15
0
{
16
0
    SelectParams(ChainType::REGTEST);
17
0
}
18
19
FUZZ_TARGET(parse_univalue, .init = initialize_parse_univalue)
20
3.41k
{
21
3.41k
    const std::string random_string(buffer.begin(), buffer.end());
22
3.41k
    bool valid = true;
23
3.41k
    const UniValue univalue = [&] {
24
3.41k
        UniValue uv;
25
3.41k
        if (!uv.read(random_string)) valid = false;
26
3.41k
        return valid ? uv : UniValue{};
27
3.41k
    }();
28
3.41k
    if (!valid) {
29
392
        return;
30
392
    }
31
3.02k
    try {
32
3.02k
        (void)ParseHashO(univalue, "A");
33
3.02k
    } catch (const UniValue&) {
34
3.01k
    } catch (const std::runtime_error&) {
35
3.01k
    }
36
3.02k
    try {
37
3.02k
        (void)ParseHashO(univalue, random_string);
38
3.02k
    } catch (const UniValue&) {
39
3.02k
    } catch (const std::runtime_error&) {
40
3.02k
    }
41
3.02k
    try {
42
3.02k
        (void)ParseHashV(univalue, "A");
43
3.02k
    } catch (const UniValue&) {
44
2.83k
    } catch (const std::runtime_error&) {
45
183
    }
46
3.02k
    try {
47
3.02k
        (void)ParseHashV(univalue, random_string);
48
3.02k
    } catch (const UniValue&) {
49
2.83k
    } catch (const std::runtime_error&) {
50
183
    }
51
3.02k
    try {
52
3.02k
        (void)ParseHexO(univalue, "A");
53
3.02k
    } catch (const UniValue&) {
54
3.02k
    }
55
3.02k
    try {
56
3.02k
        (void)ParseHexO(univalue, random_string);
57
3.02k
    } catch (const UniValue&) {
58
3.02k
    }
59
3.02k
    try {
60
3.02k
        (void)ParseHexV(univalue, "A");
61
3.02k
    } catch (const UniValue&) {
62
3.01k
    } catch (const std::runtime_error&) {
63
0
    }
64
3.02k
    try {
65
3.02k
        (void)ParseHexV(univalue, random_string);
66
3.02k
    } catch (const UniValue&) {
67
3.01k
    } catch (const std::runtime_error&) {
68
0
    }
69
3.02k
    try {
70
3.02k
        if (univalue.isNull() || univalue.isStr()) (void)ParseSighashString(univalue);
71
3.02k
    } catch (const UniValue&) {
72
2.83k
    }
73
3.02k
    try {
74
3.02k
        (void)AmountFromValue(univalue);
75
3.02k
    } catch (const UniValue&) {
76
3.01k
    } catch (const std::runtime_error&) {
77
0
    }
78
3.02k
    try {
79
3.02k
        FlatSigningProvider provider;
80
3.02k
        if (buffer.size() < 10'000) (void)EvalDescriptorStringOrObject(univalue, provider);
81
3.02k
    } catch (const UniValue&) {
82
2.00k
    } catch (const std::runtime_error&) {
83
5
    }
84
3.02k
    try {
85
3.02k
        (void)ParseConfirmTarget(univalue, std::numeric_limits<unsigned int>::max());
86
3.02k
    } catch (const UniValue&) {
87
3.01k
    } catch (const std::runtime_error&) {
88
3.01k
    }
89
3.02k
    try {
90
3.02k
        (void)ParseDescriptorRange(univalue);
91
3.02k
    } catch (const UniValue&) {
92
2.96k
    } catch (const std::runtime_error&) {
93
57
    }
94
3.02k
}