Coverage Report

Created: 2025-02-21 14:36

/root/bitcoin/src/support/allocators/zeroafterfree.h
Line
Count
Source (jump to first uncovered line)
1
// Copyright (c) 2009-2010 Satoshi Nakamoto
2
// Copyright (c) 2009-2022 The Bitcoin Core developers
3
// Distributed under the MIT software license, see the accompanying
4
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6
#ifndef BITCOIN_SUPPORT_ALLOCATORS_ZEROAFTERFREE_H
7
#define BITCOIN_SUPPORT_ALLOCATORS_ZEROAFTERFREE_H
8
9
#include <support/cleanse.h>
10
11
#include <memory>
12
#include <vector>
13
14
template <typename T>
15
struct zero_after_free_allocator {
16
    using value_type = T;
17
18
    zero_after_free_allocator() noexcept = default;
19
    template <typename U>
20
    zero_after_free_allocator(const zero_after_free_allocator<U>&) noexcept
21
    {
22
    }
23
24
    T* allocate(std::size_t n)
25
0
    {
26
0
        return std::allocator<T>{}.allocate(n);
27
0
    }
28
29
    void deallocate(T* p, std::size_t n)
30
0
    {
31
0
        if (p != nullptr)
32
0
            memory_cleanse(p, sizeof(T) * n);
33
0
        std::allocator<T>{}.deallocate(p, n);
34
0
    }
35
36
    template <typename U>
37
    friend bool operator==(const zero_after_free_allocator&, const zero_after_free_allocator<U>&) noexcept
38
    {
39
        return true;
40
    }
41
    template <typename U>
42
    friend bool operator!=(const zero_after_free_allocator&, const zero_after_free_allocator<U>&) noexcept
43
0
    {
44
0
        return false;
45
0
    }
46
};
47
48
/** Byte-vector that clears its contents before deletion. */
49
using SerializeData = std::vector<std::byte, zero_after_free_allocator<std::byte>>;
50
51
#endif // BITCOIN_SUPPORT_ALLOCATORS_ZEROAFTERFREE_H