src: Fix bug in get_uint64

This commit is contained in:
Tatsuhiro Tsujikawa 2015-08-11 23:42:32 +09:00
parent 020e66b9da
commit 81add96b1e
2 changed files with 15 additions and 5 deletions

View File

@ -1158,7 +1158,7 @@ uint64_t get_uint64(const uint8_t *data) {
n += static_cast<uint64_t>(data[1]) << 48;
n += static_cast<uint64_t>(data[2]) << 40;
n += static_cast<uint64_t>(data[3]) << 32;
n += data[4] << 24;
n += static_cast<uint64_t>(data[4]) << 24;
n += data[5] << 16;
n += data[6] << 8;
n += data[7];

View File

@ -394,12 +394,22 @@ void test_util_localtime_date(void) {
}
void test_util_get_uint64(void) {
auto v = std::array<unsigned char, 8>{
{0x01, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xab, 0xbc}};
{
auto v = std::array<unsigned char, 8>{
{0x01, 0x12, 0x34, 0x56, 0xff, 0x9a, 0xab, 0xbc}};
auto n = util::get_uint64(v.data());
auto n = util::get_uint64(v.data());
CU_ASSERT(0x01123456789aabbcULL == n);
CU_ASSERT(0x01123456ff9aabbcULL == n);
}
{
auto v = std::array<unsigned char, 8>{
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}};
auto n = util::get_uint64(v.data());
CU_ASSERT(0xffffffffffffffffULL == n);
}
}
} // namespace shrpx