diff --git a/rabin/rabin_polynomial.c b/rabin/rabin_polynomial.c index 2eff7ac..85fb81e 100755 --- a/rabin/rabin_polynomial.c +++ b/rabin/rabin_polynomial.c @@ -96,12 +96,12 @@ create_rabin_context(uint64_t chunksize, uint64_t real_chunksize, const char *al int level = 14; /* - * For LZMA we use 4K minimum Rabin block size. For everything else it - * is 1K based on experimentation. + * For LZMA with chunksize <= LZMA Window size we use 4K minimum Rabin + * block size. For everything else it is 1K based on experimentation. */ ctx = (rabin_context_t *)slab_alloc(NULL, sizeof (rabin_context_t)); ctx->rabin_poly_max_block_size = RAB_POLYNOMIAL_MAX_BLOCK_SIZE; - if (memcmp(algo, "lzma", 4) == 0) { + if (memcmp(algo, "lzma", 4) == 0 && chunksize <= LZMA_WINDOW_MAX) { ctx->rabin_poly_min_block_size = RAB_POLYNOMIAL_MIN_BLOCK_SIZE; ctx->rabin_avg_block_mask = RAB_POLYNOMIAL_AVG_BLOCK_MASK; ctx->rabin_poly_avg_block_size = RAB_POLYNOMIAL_AVG_BLOCK_SIZE; diff --git a/rabin/rabin_polynomial.h b/rabin/rabin_polynomial.h index 3de307a..186aea2 100644 --- a/rabin/rabin_polynomial.h +++ b/rabin/rabin_polynomial.h @@ -79,6 +79,7 @@ #define RAB_POLYNOMIAL_AVG_BLOCK_MASK2 (RAB_POLYNOMIAL_AVG_BLOCK_SIZE - 1) #define RAB_POLYNOMIAL_MIN_BLOCK_SIZE2 2048 +#define LZMA_WINDOW_MAX (128L * 1024L * 1024L) #define RAB_POLYNOMIAL_WIN_SIZE 31 #define RAB_POLYNOMIAL_MIN_WIN_SIZE 17 #define RAB_POLYNOMIAL_MAX_WIN_SIZE 63