From 826ddc5403c7fc53e00dc3503d7451d99a930989 Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Sun, 5 Apr 2020 10:04:05 -0700 Subject: [PATCH] Enhance the validation of --block-size for older protocols. Fixes bug #13974. --- options.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/options.c b/options.c index a9b07184..3464f9dd 100644 --- a/options.c +++ b/options.c @@ -1984,10 +1984,17 @@ int parse_arguments(int *argc_p, const char ***argv_p) } #endif - if (block_size > MAX_BLOCK_SIZE) { - snprintf(err_buf, sizeof err_buf, - "--block-size=%lu is too large (max: %u)\n", block_size, MAX_BLOCK_SIZE); - return 0; + if (block_size) { + /* We may not know the real protocol_version at this point if this is the client + * option parsing, but we still want to check it so that the client can specify + * a --protocol=29 option with a larger block size. */ + int32 max_blength = protocol_version < 30 ? OLD_MAX_BLOCK_SIZE : MAX_BLOCK_SIZE; + + if (block_size > max_blength) { + snprintf(err_buf, sizeof err_buf, + "--block-size=%lu is too large (max: %u)\n", block_size, max_blength); + return 0; + } } if (write_batch && read_batch) { -- 2.47.2