From 2a41814985f99d76ca07b48896eb79a1e2b4dea9 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Tue, 8 Mar 2022 19:56:42 +0100 Subject: [PATCH] [varint] Tighten max input bounds. --- core/encoding/varint/leb128.odin | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/encoding/varint/leb128.odin b/core/encoding/varint/leb128.odin index 898c6af67..476b9c2c9 100644 --- a/core/encoding/varint/leb128.odin +++ b/core/encoding/varint/leb128.odin @@ -32,7 +32,7 @@ decode_uleb128 :: proc(buf: []u8) -> (val: u128, size: int, err: Error) { size = i + 1 // 18 * 7 bits = 126, which means that a possible 19th byte may at most be 0b0000_0011. - if size == LEB128_MAX_BYTES && v > 0b0000_0011 { + if size > LEB128_MAX_BYTES || size == LEB128_MAX_BYTES && v > 0b0000_0011 { return 0, 0, .Value_Too_Large } @@ -64,7 +64,7 @@ decode_ileb128 :: proc(buf: []u8) -> (val: i128, size: int, err: Error) { size += 1 // 18 * 7 bits = 126, which including sign means we can have a 19th byte. - if size == LEB128_MAX_BYTES && v > 0x7f { + if size > LEB128_MAX_BYTES || size == LEB128_MAX_BYTES && v > 0x7f { return 0, 0, .Value_Too_Large }