From: Wayne Davison Date: Sun, 5 Apr 2020 17:04:05 +0000 (-0700) Subject: Enhance the validation of --block-size for older protocols. X-Git-Tag: v3.2.0pre1~194 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=826ddc5403c7fc53e00dc3503d7451d99a930989;p=thirdparty%2Frsync.git Enhance the validation of --block-size for older protocols. Fixes bug #13974. --- 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) {