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[1]) << 48;
n += static_cast<uint64_t>(data[2]) << 40; n += static_cast<uint64_t>(data[2]) << 40;
n += static_cast<uint64_t>(data[3]) << 32; 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[5] << 16;
n += data[6] << 8; n += data[6] << 8;
n += data[7]; n += data[7];

View File

@ -394,12 +394,22 @@ void test_util_localtime_date(void) {
} }
void test_util_get_uint64(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 } // namespace shrpx