X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Flzms-compress.c;h=c6592a9f605598e02a25fd306570333decf23d88;hp=a4d45300681f6871f14fcbec0886fb67cf9b3a6b;hb=cf8e2becfde288f6adb700a64d673b76791fbff2;hpb=81c83fa2dbb44e788f234ddd5427c00e33c12d52 diff --git a/src/lzms-compress.c b/src/lzms-compress.c index a4d45300..c6592a9f 100644 --- a/src/lzms-compress.c +++ b/src/lzms-compress.c @@ -888,7 +888,7 @@ lzms_get_near_optimal_match(struct lzms_compressor *ctx) ctx->optimum_end_idx = 0; longest_rep_len = ctx->params.min_match_length - 1; - if (lz_bt_get_position(&ctx->mf) >= 1) { + if (lz_bt_get_position(&ctx->mf) >= LZMS_MAX_INIT_RECENT_OFFSET) { u32 limit = min(ctx->params.max_match_length, lz_bt_get_remaining_size(&ctx->mf)); for (int i = 0; i < LZMS_NUM_RECENT_OFFSETS; i++) { @@ -984,18 +984,20 @@ lzms_get_near_optimal_match(struct lzms_compressor *ctx) return lzms_match_chooser_reverse_list(ctx, cur_pos); longest_rep_len = ctx->params.min_match_length - 1; - u32 limit = min(ctx->params.max_match_length, - lz_bt_get_remaining_size(&ctx->mf)); - for (int i = 0; i < LZMS_NUM_RECENT_OFFSETS; i++) { - u32 offset = ctx->optimum[cur_pos].state.lru.recent_offsets[i]; - const u8 *strptr = lz_bt_get_window_ptr(&ctx->mf); - const u8 *matchptr = strptr - offset; - u32 len = 0; - while (len < limit && strptr[len] == matchptr[len]) - len++; - if (len > longest_rep_len) { - longest_rep_len = len; - longest_rep_offset = offset; + if (lz_bt_get_position(&ctx->mf) >= LZMS_MAX_INIT_RECENT_OFFSET) { + u32 limit = min(ctx->params.max_match_length, + lz_bt_get_remaining_size(&ctx->mf)); + for (int i = 0; i < LZMS_NUM_RECENT_OFFSETS; i++) { + u32 offset = ctx->optimum[cur_pos].state.lru.recent_offsets[i]; + const u8 *strptr = lz_bt_get_window_ptr(&ctx->mf); + const u8 *matchptr = strptr - offset; + u32 len = 0; + while (len < limit && strptr[len] == matchptr[len]) + len++; + if (len > longest_rep_len) { + longest_rep_len = len; + longest_rep_offset = offset; + } } }