in hpack/src/main/java/com/twitter/hpack/Decoder.java [531:555]
private static int decodeULE128(InputStream in) throws IOException {
in.mark(5);
int result = 0;
int shift = 0;
while (shift < 32) {
if (in.available() == 0) {
// Buffer does not contain entire integer,
// reset reader index and return -1.
in.reset();
return -1;
}
byte b = (byte) in.read();
if (shift == 28 && (b & 0xF8) != 0) {
break;
}
result |= (b & 0x7F) << shift;
if ((b & 0x80) == 0) {
return result;
}
shift += 7;
}
// Value exceeds Integer.MAX_VALUE
in.reset();
throw DECOMPRESSION_EXCEPTION;
}