commit 402a5ec1f96e30e83525c0e1509f854a706d1066 from: Stefan Sperling date: Mon Jan 10 13:13:16 2022 UTC set a cap on the amount of memory we use to store encoded deltas commit - 5060d5a177f3837f037dfeb5a6ba245baf16a8c5 commit + 402a5ec1f96e30e83525c0e1509f854a706d1066 blob - f9ef76e1b2a866d879061a355ecdda783cc211a4 blob + 8a3d8a8fd7f7eb29a2707c38e554ff6a37b63685 --- lib/pack_create.c +++ lib/pack_create.c @@ -431,6 +431,8 @@ pick_deltas(struct got_pack_meta **meta, int nmeta, in int i, j, ndeltas, best_ndeltas; off_t size, best_size; const int max_base_candidates = 3; + size_t delta_memsize = 0; + const size_t max_delta_memsize = 25 * GOT_DELTA_RESULT_SIZE_CACHED_MAX; int outfd = -1; qsort(meta, nmeta, sizeof(struct got_pack_meta *), delta_order_cmp); @@ -547,7 +549,9 @@ pick_deltas(struct got_pack_meta **meta, int nmeta, in } if (best_ndeltas > 0) { - if (best_size <= GOT_DELTA_RESULT_SIZE_CACHED_MAX) { + if (best_size <= GOT_DELTA_RESULT_SIZE_CACHED_MAX && + delta_memsize + best_size <= max_delta_memsize) { + delta_memsize += best_size; err = encode_delta_in_mem(m, raw, best_deltas, best_ndeltas, best_size, m->prev->size); } else {