From 51630f179562687f27d1e5eb9f3c370de4f01622 Mon Sep 17 00:00:00 2001 From: Mike <45243121+tankf33der@users.noreply.github.com> Date: Sun, 17 Aug 2025 19:25:15 +0300 Subject: [PATCH] math.big: fix bytes() if bit_len is divisible by 60, add tests (#25126) --- vlib/math/big/big_test.v | 11 +++++++++++ vlib/math/big/integer.v | 6 +++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/vlib/math/big/big_test.v b/vlib/math/big/big_test.v index 15c422b0a..59905c573 100644 --- a/vlib/math/big/big_test.v +++ b/vlib/math/big/big_test.v @@ -991,3 +991,14 @@ fn test_pow2_is_power_of_2() { assert big.two_int.pow(n).is_power_of_2(), 'pow2: ${n}' } } + +fn test_bytes_from_bytes() { + input := ['0', '9999999999999999999999999999999999999', '783086277830859384', + '890810171456467012368983335296321559'] + for n in input { + a := big.integer_from_string(n)! + b, _ := a.bytes() + c := big.integer_from_bytes(b) + assert a.str() == c.str() + } +} diff --git a/vlib/math/big/integer.v b/vlib/math/big/integer.v index 8f169301e..78be0d261 100644 --- a/vlib/math/big/integer.v +++ b/vlib/math/big/integer.v @@ -891,7 +891,11 @@ pub fn (a Integer) bytes() ([]u8, int) { bits_in_byte = 0 } // MSB digit - for i := bit_len % digit_bits - 1; i >= 0; i-- { + mut msb_bits := bit_len % digit_bits + if msb_bits == 0 { + msb_bits = digit_bits + } + for i := msb_bits - 1; i >= 0; i-- { bit = u8((digit >> i) & 1) current_byte = (current_byte << 1) | u8(bit) bits_in_byte++ -- 2.39.5