[Tarantool-patches] [PATCH v7] base64: fix decoder output buffer overrun (reads)
Sergey Nikiforov
void at tarantool.org
Tue Mar 9 13:09:05 MSK 2021
On 03.03.2021 2:08, Alexander Turenko wrote:
>> -static int
>> -base64_decode_block(const char *in_base64, int in_len,
>> - char *out_bin, int out_len,
>> - struct base64_decodestate *state)
>> +int
>> +base64_decode(const char *in_base64, int in_len,
>> + char *out_bin, int out_len)
>> {
>> const char *in_pos = in_base64;
>> const char *in_end = in_base64 + in_len;
>> char *out_pos = out_bin;
>> char *out_end = out_bin + out_len;
>> int fragment;
>> + char curr_byte;
>
> AFAIR, nothing prevent us from using `*out_pos`. I don't see a reason to
> introduce `curr_byte`. It was necessary in v6 to store the initial
> state for a block.
I have removed this local var in v8.
Initially I planned to send patch series with this local var added in
second patch and performance-optimized (w/o unnecessarily checks)
version of decode function in third but my benchmarks have shown
controversial effects. Adding this local var "by itself" actually
decreases performance on one of my test machines but improves on another
one. Optimized decode function, however, benefits from this local var
but not when output buffer is large enough. And effect is different on
another machine...
I haved saved optimized code (nothing really new here) and benchmark
locally to work on them further later on.
More information about the Tarantool-patches
mailing list