On Wed, Dec 22, 2021 at 2:33 AM Han Xin <chiyutianyi@xxxxxxxxx> wrote: > > From: Han Xin <hanxin.hx@xxxxxxxxxxxxxxx> > > In dry_run mode, "get_data()" is used to verify the inflation of data, > and the returned buffer will not be used at all and will be freed > immediately. Even in dry_run mode, it is dangerous to allocate a > full-size buffer for a large blob object. Therefore, only allocate a > low memory footprint when calling "get_data()" in dry_run mode. > > Suggested-by: Jiang Xin <zhiyou.jx@xxxxxxxxxxxxxxx> > Signed-off-by: Han Xin <hanxin.hx@xxxxxxxxxxxxxxx> > --- > builtin/unpack-objects.c | 23 +++++++++--- > t/t5590-unpack-non-delta-objects.sh | 57 +++++++++++++++++++++++++++++ > 2 files changed, 74 insertions(+), 6 deletions(-) > create mode 100755 t/t5590-unpack-non-delta-objects.sh > > diff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c > index 4a9466295b..9104eb48da 100644 > --- a/builtin/unpack-objects.c > +++ b/builtin/unpack-objects.c > @@ -96,15 +96,21 @@ static void use(int bytes) > display_throughput(progress, consumed_bytes); > } > > -static void *get_data(unsigned long size) > +static void *get_data(size_t size, int dry_run) After a offline talk with Han Xin, we feel it is not necessary to pass "dry_run" as a argument, use the file-scope static variable directly in "get_data()". > { > git_zstream stream; > - void *buf = xmallocz(size); > + size_t bufsize; > + void *buf; > > memset(&stream, 0, sizeof(stream)); > + if (dry_run && size > 8192) Use the file-scope static variable "dry_run".