diff --git a/src/util.cc b/src/util.cc index 1ef77bf0..a5865606 100644 --- a/src/util.cc +++ b/src/util.cc @@ -1158,7 +1158,7 @@ uint64_t get_uint64(const uint8_t *data) { n += static_cast(data[1]) << 48; n += static_cast(data[2]) << 40; n += static_cast(data[3]) << 32; - n += data[4] << 24; + n += static_cast(data[4]) << 24; n += data[5] << 16; n += data[6] << 8; n += data[7]; diff --git a/src/util_test.cc b/src/util_test.cc index 85c791f6..f424a0f6 100644 --- a/src/util_test.cc +++ b/src/util_test.cc @@ -394,12 +394,22 @@ void test_util_localtime_date(void) { } void test_util_get_uint64(void) { - auto v = std::array{ - {0x01, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xab, 0xbc}}; + { + auto v = std::array{ + {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{ + {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}}; + + auto n = util::get_uint64(v.data()); + + CU_ASSERT(0xffffffffffffffffULL == n); + } } } // namespace shrpx