diff --git a/wpiutil/src/main/native/cpp/leb128.cpp b/wpiutil/src/main/native/cpp/leb128.cpp index 14fb10400b..aa931c0bb9 100644 --- a/wpiutil/src/main/native/cpp/leb128.cpp +++ b/wpiutil/src/main/native/cpp/leb128.cpp @@ -45,7 +45,7 @@ uint64_t ReadUleb128(const char* addr, uint64_t* ret) { addr++; count++; - result |= (byte & 0x7f) << shift; + result |= (byte & 0x7fULL) << shift; shift += 7; if (!(byte & 0x80)) { @@ -69,7 +69,7 @@ bool ReadUleb128(raw_istream& is, uint64_t* ret) { return false; } - result |= (byte & 0x7f) << shift; + result |= (byte & 0x7fULL) << shift; shift += 7; if (!(byte & 0x80)) { diff --git a/wpiutil/src/test/native/cpp/leb128Test.cpp b/wpiutil/src/test/native/cpp/leb128Test.cpp index 7b02935dce..cc537ae300 100644 --- a/wpiutil/src/test/native/cpp/leb128Test.cpp +++ b/wpiutil/src/test/native/cpp/leb128Test.cpp @@ -45,6 +45,8 @@ TEST(LEB128Test, WriteUleb128) { EXPECT_ULEB128_EQ("\xff\x01", 0xff, 0); EXPECT_ULEB128_EQ("\x80\x02", 0x100, 0); EXPECT_ULEB128_EQ("\x81\x02", 0x101, 0); + EXPECT_ULEB128_EQ("\x80\x41", 0x2080, 0); + EXPECT_ULEB128_EQ("\x80\xc1\x80\x80\x10", 0x100002080, 0); #undef EXPECT_ULEB128_EQ } @@ -70,7 +72,8 @@ TEST(LEB128Test, ReadUleb128) { EXPECT_READ_ULEB128_EQ(0xffu, "\xff\x01"); EXPECT_READ_ULEB128_EQ(0x100u, "\x80\x02"); EXPECT_READ_ULEB128_EQ(0x101u, "\x81\x02"); - EXPECT_READ_ULEB128_EQ(8320u, "\x80\xc1\x80\x80\x10"); + EXPECT_READ_ULEB128_EQ(0x2080u, "\x80\x41"); + EXPECT_READ_ULEB128_EQ(0x100002080u, "\x80\xc1\x80\x80\x10"); #undef EXPECT_READ_ULEB128_EQ }