Skip to content

Commit a5b2ad0

Browse files
committed
BlockchainLMDB: do not assume alignment for alt block entries
1 parent 389e3ba commit a5b2ad0

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

src/blockchain_db/lmdb/db_lmdb.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2399,14 +2399,15 @@ bool BlockchainLMDB::for_all_alt_blocks(std::function<bool(const crypto::hash&,
23992399
const crypto::hash &blkid = *(const crypto::hash*)k.mv_data;
24002400
if (v.mv_size < sizeof(alt_block_data_t))
24012401
throw0(DB_ERROR("alt_blocks record is too small"));
2402-
const alt_block_data_t *data = (const alt_block_data_t*)v.mv_data;
2402+
alt_block_data_t data;
2403+
memcpy(&data, v.mv_data, sizeof(data));
24032404
cryptonote::blobdata_ref bd;
24042405
if (include_blob)
24052406
{
24062407
bd = {reinterpret_cast<const char*>(v.mv_data) + sizeof(alt_block_data_t), v.mv_size - sizeof(alt_block_data_t)};
24072408
}
24082409

2409-
if (!f(blkid, *data, &bd)) {
2410+
if (!f(blkid, data, &bd)) {
24102411
ret = false;
24112412
break;
24122413
}
@@ -4519,11 +4520,10 @@ bool BlockchainLMDB::get_alt_block(const crypto::hash &blkid, alt_block_data_t *
45194520
if (v.mv_size < sizeof(alt_block_data_t))
45204521
throw0(DB_ERROR("Record size is less than expected"));
45214522

4522-
const alt_block_data_t *ptr = (const alt_block_data_t*)v.mv_data;
45234523
if (data)
4524-
*data = *ptr;
4524+
memcpy(data, v.mv_data, sizeof(alt_block_data_t));
45254525
if (blob)
4526-
blob->assign((const char*)(ptr + 1), v.mv_size - sizeof(alt_block_data_t));
4526+
blob->assign(((const char*)(v.mv_data)) + sizeof(alt_block_data_t), v.mv_size - sizeof(alt_block_data_t));
45274527

45284528
TXN_POSTFIX_RDONLY();
45294529
return true;

0 commit comments

Comments
 (0)