On 11/10/2025 19:50, Collin Funk wrote:
Collin Funk <[email protected]> writes:

     $ timeout 10 sh -c \
         "(ulimit -v $s && uutils base64 < /dev/zero >out 2>err)"
     $ cat err && wc -c out
     base64: out of memory
     0 out

In case anyone is looking for work to do, there are some programs in GNU
Coreutils who have this issue. For example, 'basenc --base58' requires
that the file fits into memory. It would be nice to fix those where
possible.

The 'basenc --base58' case, if I remember correctly, is because of the
gmp functions we use. If we could fix it without sacrificing the
speedups from gmp, that would be great.

It also would be a good idea to add bounded-memory.sh tests to other
programs.

I definitely would not have added a non streamable base58 implementation
if a streamable one was supported.  Unfortunately the base conversion
operation used is not streamable.

For example, see the completely different output below for very similar inputs:

$ printf '|%*s|' 100 | basenc 
--base582cypwC9WHm46BUbDVHDDtpoEE8HyXVnVw3ytMvBLww1vipUBejw9HGLm3yRvvJstDJqfW11X7nyp
xsuaWQZgUD4KWXbfomaCWbqNnoejTfzhJqVGbTFU9iHzWsfdy6eZXH3pcT2a9G2w

$ printf '|%*s|' 101 | basenc --base58
89opaCCYGySdsEn27pYwujy3NwBvVc3phaA5hKif3TR67aWz1aVyYniDS852zHub3Kjnw13Hvywp
hdh4to1FD6DehL42HRjXoekXBAuYQj7euj1mq4rrqTFzrrdYAbvnYdqT9TswHTEZR

It's not a huge problem for base58 anyway because it's designed for
small amounts of data where unambiguous transcription is important.

cheers,
Padraig

Reply via email to