aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfanquake <fanquake@gmail.com>2023-06-27 12:49:29 +0100
committerfanquake <fanquake@gmail.com>2023-06-27 12:54:20 +0100
commitb741a62a2f6815a1f42a74e48ac624bec42e5296 (patch)
tree355c1eaeb28a0f68f8603792c19099c58e752ebb
parent35b01e85049219a190ccfdf589e2613942eca215 (diff)
parent5fc4939e17509534eb36727b27ac0afb941e44f7 (diff)
Merge bitcoin/bitcoin#27929: Added static_assert to check that base_blob is using whole bytes.
5fc4939e17509534eb36727b27ac0afb941e44f7 Added static_assert to check that base_blob is using whole bytes. (Brotcrunsher) Pull request description: Prior to this commit it was possible to create base_blobs with any arbitrary amount of bits, like base_blob<9>. One could assume that this would be a valid way to create a bit field that guarantees to have at least 9 bits. However, in such a case, base_blob would not behave as expected because the WIDTH is rounded down to the closest whole byte (simple integer division by 8). This commit makes sure that this oddity is detected and blocked by the compiler. ACKs for top commit: MarcoFalke: lgtm ACK 5fc4939e17509534eb36727b27ac0afb941e44f7 theStack: ACK 5fc4939e17509534eb36727b27ac0afb941e44f7 stickies-v: ACK 5fc4939e17509534eb36727b27ac0afb941e44f7 Tree-SHA512: 6a06760f09d4a9e6f0b9338d4dddd4091f2ac59a843a443d9302959936d72c55f7cccd55a51ec3a5a799921f68be1b87968ef3c9c11d3389cbd369b5045bb50a
-rw-r--r--src/uint256.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/uint256.h b/src/uint256.h
index 1cc3721487..dc8887287a 100644
--- a/src/uint256.h
+++ b/src/uint256.h
@@ -22,6 +22,7 @@ class base_blob
{
protected:
static constexpr int WIDTH = BITS / 8;
+ static_assert(BITS % 8 == 0, "base_blob currently only supports whole bytes.");
std::array<uint8_t, WIDTH> m_data;
static_assert(WIDTH == sizeof(m_data), "Sanity check");