aboutsummaryrefslogtreecommitdiff
path: root/src/chain.cpp
diff options
context:
space:
mode:
authorWladimir J. van der Laan <[email protected]>2017-12-01 15:17:25 +0100
committerWladimir J. van der Laan <[email protected]>2017-12-01 15:19:07 +0100
commit0d7e0a3289baa3b641ca7ab864c5e8af4306f4de (patch)
treeadc796ee37727c0d11dc5e5bcd0bd3d3e30c6b62 /src/chain.cpp
parentMerge #11791: [tests] Rename NodeConn and NodeConnCB (diff)
parentFix code constness in CBlockIndex::GetAncestor() overloads (diff)
downloaddiscoin-0d7e0a3289baa3b641ca7ab864c5e8af4306f4de.tar.xz
discoin-0d7e0a3289baa3b641ca7ab864c5e8af4306f4de.zip
Merge #11337: Fix code constness in CBlockIndex::GetAncestor() overloads
b4058ed Fix code constness in CBlockIndex::GetAncestor() overloads (Dan Raviv) Pull request description: Make the non-const overload of `CBlockIndex::GetAncestor()` reuse the const overload implementation instead of the other way around. This way, the constness of the const overload implementation is guaranteed. The other way around, it was possible to implement the non-const overload in a way which mutates the object, and since that implementation would be called even for const objects (due to the reuse), we would get undefined behavior. Tree-SHA512: 545a8639bc52502ea06dbd924e8fabec6274fa69b43e3b8966a7987ce4dae6fb2498f623730fde7ed0e47478941c7f8baa2e76a12018134ff7c14c0dfa25ba3a
Diffstat (limited to 'src/chain.cpp')
-rw-r--r--src/chain.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/chain.cpp b/src/chain.cpp
index 9f40c41fd..7ebc08a50 100644
--- a/src/chain.cpp
+++ b/src/chain.cpp
@@ -80,12 +80,13 @@ int static inline GetSkipHeight(int height) {
return (height & 1) ? InvertLowestOne(InvertLowestOne(height - 1)) + 1 : InvertLowestOne(height);
}
-CBlockIndex* CBlockIndex::GetAncestor(int height)
+const CBlockIndex* CBlockIndex::GetAncestor(int height) const
{
- if (height > nHeight || height < 0)
+ if (height > nHeight || height < 0) {
return nullptr;
+ }
- CBlockIndex* pindexWalk = this;
+ const CBlockIndex* pindexWalk = this;
int heightWalk = nHeight;
while (heightWalk > height) {
int heightSkip = GetSkipHeight(heightWalk);
@@ -106,9 +107,9 @@ CBlockIndex* CBlockIndex::GetAncestor(int height)
return pindexWalk;
}
-const CBlockIndex* CBlockIndex::GetAncestor(int height) const
+CBlockIndex* CBlockIndex::GetAncestor(int height)
{
- return const_cast<CBlockIndex*>(this)->GetAncestor(height);
+ return const_cast<CBlockIndex*>(static_cast<const CBlockIndex*>(this)->GetAncestor(height));
}
void CBlockIndex::BuildSkip()