diff --git a/src/uu/base32/src/base_common.rs b/src/uu/base32/src/base_common.rs index 658debbf85c..0519f2ee0b1 100644 --- a/src/uu/base32/src/base_common.rs +++ b/src/uu/base32/src/base_common.rs @@ -752,6 +752,8 @@ pub mod fast_decode { )); } + // Encodings without partial decode (base58) are one big number, so + // they are decoded in one go after the loop, never in chunks. if supports_partial_decode { flush_ready_chunks( &mut buffer, @@ -761,14 +763,6 @@ pub mod fast_decode { &mut decoded_buffer, output, )?; - } else if buffer.len() == decode_in_chunks_of_size { - decode_in_chunks_to_buffer( - supports_fast_decode_and_encode, - &buffer, - &mut decoded_buffer, - )?; - write_to_output(&mut decoded_buffer, output)?; - buffer.clear(); } } diff --git a/tests/by-util/test_basenc.rs b/tests/by-util/test_basenc.rs index d57a2e69445..61f292d2e40 100644 --- a/tests/by-util/test_basenc.rs +++ b/tests/by-util/test_basenc.rs @@ -184,6 +184,26 @@ fn test_base58_large_file_no_chunking() { // spell-checker:enable } +#[test] +fn test_base58_decode_large_input_round_trip() { + // Decoding must not cut the input into 1024-digit chunks either. + // spell-checker:disable + let input = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. ".repeat(50); + // spell-checker:enable + let encoded = new_ucmd!() + .arg("--base58") + .pipe_in(input.clone()) + .succeeds() + .stdout_move_str(); + assert!(encoded.len() > 1024); + + new_ucmd!() + .args(&["--base58", "-d"]) + .pipe_in(encoded) + .succeeds() + .stdout_is(input); +} + #[test] fn test_choose_last_encoding_base64() { new_ucmd!()