in serde-generate/runtime/cpp/bcs.hpp [94:114]
inline uint32_t BcsDeserializer::deserialize_uleb128_as_u32() {
uint64_t value = 0;
for (int shift = 0; shift < 32; shift += 7) {
auto byte = read_byte();
auto digit = byte & 0x7F;
value |= (uint64_t)digit << shift;
if (value > std::numeric_limits<uint32_t>::max()) {
throw serde::deserialization_error(
"Overflow while parsing uleb128-encoded uint32 value");
}
if (digit == byte) {
if (shift > 0 && digit == 0) {
throw serde::deserialization_error(
"Invalid uleb128 number (unexpected zero digit)");
}
return (uint32_t)value;
}
}
throw serde::deserialization_error(
"Overflow while parsing uleb128-encoded uint32 value");
}