diff --git a/src/stratum_server.cpp b/src/stratum_server.cpp index 04bc1d1..f202b67 100644 --- a/src/stratum_server.cpp +++ b/src/stratum_server.cpp @@ -132,7 +132,7 @@ void StratumServer::on_block(const BlockTemplate& block) // Get first 8 bytes of the Merkle root hash from each blob for (size_t i = 0; i < num_connections; ++i) { - blob_hashes.emplace_back(*reinterpret_cast(data + i * size + 43)); + blob_hashes.emplace_back(read_unaligned(reinterpret_cast(data + i * size + 43))); } // Find duplicates diff --git a/src/util.h b/src/util.h index dee73ae..5348648 100644 --- a/src/util.h +++ b/src/util.h @@ -136,7 +136,7 @@ const uint8_t* readVarint(const uint8_t* data, const uint8_t* data_end, T& b) template FORCEINLINE T read_unaligned(const T* p) { - static_assert(std::is_integral::value, "T must be an integer type"); + static_assert(std::is_trivially_copyable::value, "T must be a trivially copyable type"); T result; memcpy(&result, p, sizeof(T));