From patchwork Wed Oct 13 13:23:53 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12555881 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CE9B2C433FE for ; Wed, 13 Oct 2021 13:24:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BAAF261040 for ; Wed, 13 Oct 2021 13:24:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234988AbhJMN0E (ORCPT ); Wed, 13 Oct 2021 09:26:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34356 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232528AbhJMN0D (ORCPT ); Wed, 13 Oct 2021 09:26:03 -0400 Received: from mail-wr1-x431.google.com (mail-wr1-x431.google.com [IPv6:2a00:1450:4864:20::431]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 18DCEC061570 for ; Wed, 13 Oct 2021 06:24:00 -0700 (PDT) Received: by mail-wr1-x431.google.com with SMTP id v17so8313508wrv.9 for ; Wed, 13 Oct 2021 06:24:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/sgCZEVhm4PDL3iLjTUg6Fkzl4YfWpLM3LmcqSVEADQ=; b=oq9cTLS1jSiHgkIqqo/ngvJwDsO0q6nWRxLV0H8VW7Z6hHO4WEMwaFNILN+v1/vETM Oq6z+ORtPVDQuW43e1R7cjs2gxCsSRxGuz/rvVhXNfQz3KnriTRZ/YiZRuYuafugt/Wt aIi7+wy7alhhzOOSAEpwdOaieDHSkWLEBFKguNI1u0k4y6YZS8oUk+XyYS9L5C2/MtPv z3KaStPASI5UhWsvkhuIcX17r3HBEKbOd4spTV+uKTpQL2rEmFYz11+uvNNPJwad24yR g9E7PWWYtNRdiLGDn4+2PQk3uIdvX9KTmyzsXd07mWAW/+yYouF/UhnLixZx+hCnhI2i bXPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/sgCZEVhm4PDL3iLjTUg6Fkzl4YfWpLM3LmcqSVEADQ=; b=bJdfbbY1uASbGIrf1Uh1chpSPUJL+pDaRYe8yNkqU7cyBvzGAFhM1oHiHyaqvv92IQ WOZzzDw3YNXH2kG4jwn/QtMQlZou3CtmDqaYao98FzrIqBscBkATQ5OyPQl3QfAbwyNV ak/NU9VE4F4hOEr1GU7AgYW4C+3wD3kuUu2qpDwF2MH6VA2ILd5ru4t+ury/mA13ba9y Oz5UY4Wgpns+bKjzDkX1PsrvkgeIDxG0QYnRL/0MQ7pBKFm/w76iLxHt79Gw6TbhQSAh FglLq8IZVA7mLyt5erts1XwsqP9n+GDaIOhNSmLZ67kWrKHsquQaYFs8PqiEfmaDYVvz b6CA== X-Gm-Message-State: AOAM53321YVMzYYE1CTd5F8igoMp7w8sByNMfEsFd0TUrulkerFWfe45 IqzsGrCwAypSDvBuFqdu/iXA6sCea0L9mA== X-Google-Smtp-Source: ABdhPJyLUb9aAelVMBazm+rvVCnFZtsnks/9X6p/8oM4mNz4c9bnmFdeYgPWrZ4lenDC4d8wacKJxQ== X-Received: by 2002:adf:a411:: with SMTP id d17mr40363986wra.393.1634131438222; Wed, 13 Oct 2021 06:23:58 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id k10sm13044205wrh.64.2021.10.13.06.23.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Oct 2021 06:23:57 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Elijah Newren , =?utf-8?q?Martin_=C3=85gren?= , Andrzej Hunt , Jeff King , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH v3 1/3] unpack-trees: don't leak memory in verify_clean_subdirectory() Date: Wed, 13 Oct 2021 15:23:53 +0200 Message-Id: X-Mailer: git-send-email 2.33.0.1569.gd2dc77f7abf In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Fix two different but related memory leaks in verify_clean_subdirectory(). We leaked both the "pathbuf" if read_directory() returned non-zero, and we never cleaned up our own "struct dir_struct" either. * "pathbuf": When the read_directory() call followed by the free(pathbuf) was added in c81935348be (Fix switching to a branch with D/F when current branch has file D., 2007-03-15) we didn't bother to free() before we called die(). But when this code was later libified in 203a2fe1170 (Allow callers of unpack_trees() to handle failure, 2008-02-07) we started to leak as we returned data to the caller. This fixes that memory leak, which can be observed under SANITIZE=leak with e.g. the "t1001-read-tree-m-2way.sh" test. * "struct dir_struct": We've leaked the dir_struct ever since this code was added back in c81935348be. When that commit was written there wasn't an equivalent of dir_clear(). Since it was added in 270be816049 (dir.c: provide clear_directory() for reclaiming dir_struct memory, 2013-01-06) we've omitted freeing the memory allocated here. This memory leak could also be observed under SANITIZE=leak and the "t1001-read-tree-m-2way.sh" test. This makes all the test in "t1001-read-tree-m-2way.sh" pass under "GIT_TEST_PASSING_SANITIZE_LEAK=true", we'd previously die in tests 25, 26 & 28. Signed-off-by: Ævar Arnfjörð Bjarmason --- t/t1001-read-tree-m-2way.sh | 2 ++ unpack-trees.c | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/t/t1001-read-tree-m-2way.sh b/t/t1001-read-tree-m-2way.sh index 1057a96b249..d1115528cb9 100755 --- a/t/t1001-read-tree-m-2way.sh +++ b/t/t1001-read-tree-m-2way.sh @@ -20,6 +20,8 @@ In the test, these paths are used: rezrov - in H, deleted in M yomin - not in H or M ' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh . "$TEST_DIRECTORY"/lib-read-tree.sh diff --git a/unpack-trees.c b/unpack-trees.c index a7e1712d236..89ca95ce90b 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -2156,9 +2156,10 @@ static int verify_clean_subdirectory(const struct cache_entry *ce, if (o->dir) d.exclude_per_dir = o->dir->exclude_per_dir; i = read_directory(&d, o->src_index, pathbuf, namelen+1, NULL); + dir_clear(&d); + free(pathbuf); if (i) return add_rejected_path(o, ERROR_NOT_UPTODATE_DIR, ce->name); - free(pathbuf); return cnt; } From patchwork Wed Oct 13 13:23:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12555883 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B58C1C433EF for ; Wed, 13 Oct 2021 13:24:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 99524610D0 for ; Wed, 13 Oct 2021 13:24:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235152AbhJMN0G (ORCPT ); Wed, 13 Oct 2021 09:26:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34358 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234896AbhJMN0E (ORCPT ); Wed, 13 Oct 2021 09:26:04 -0400 Received: from mail-wr1-x432.google.com (mail-wr1-x432.google.com [IPv6:2a00:1450:4864:20::432]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BE5E2C061570 for ; Wed, 13 Oct 2021 06:24:00 -0700 (PDT) Received: by mail-wr1-x432.google.com with SMTP id t2so8357944wrb.8 for ; Wed, 13 Oct 2021 06:24:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=KVvPK5COM6v54G4vPWlHwnaXgrf/PDAHYl3qMymFINY=; b=mQaBxEXggAQ0TRfndB619S1YKErF4mu+8t4P3rBbhgha/Y0nOHArlJxym9mT4dc/U6 7aovW98G2k9A6R8zQNJ3IAV5gCJ86uRbEAiCqyUEPfQboxoQ0zpO/oFThRtsWgMqKHHI U6wdN1gRVnGDj7ZO3O2K+kFiXZClvqMji50JW9FDsok72TrvgqIW34QAldPBpjjImpre 9muxy+vRj32b+JDbArP9uSqynlquw+hQi4chEAm47kiNCRauTbq0NWqAUrCRcVuFeWGo DsjlKEVpKks1AivAtF2ZHOkhrJUBJmAI8ANxIkdr4XG5LTRRJdjJNbnlFiXSP5jCOBXR PlAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=KVvPK5COM6v54G4vPWlHwnaXgrf/PDAHYl3qMymFINY=; b=JETytoOr5VkI4Q4lG5YXLUuF73YxcZNDe7Mj2LNLQpMelxJx8TDB/9LQK8pGLhayGz MI+oB9mbM6Z1u8J/CgVUCbkFYZITrYIp02ScPXu6ODhGnWrU2Bvoe2PLBYF3cSmpAGtW VyhB9AQ9/XMqoSOWJE7EE7UwsMJMMove4/nJsYGX1ggeE1GH3DmdONCSPQPq3vvyjROd IeLouQUJGprlTt5wjPQvW5+2Vl0LCrxkJUYDaojSQe8qOxOtVktaD6EE5+MJGCCALW+z F29RMolcqyNCRhBYFntmHwIXrmGVKzlp0FSq+1UaNJ7JBDAnzNVuvGa2ER5x2spQxl2J uBgA== X-Gm-Message-State: AOAM533T0s7tlQi92Ps4+BXNfcHV1UdjxFbOvsxu1gqcBJcxI0DQWqoj Wu6Yb+y3O47kKAtLQwd8VvQvjiaIMV+l+w== X-Google-Smtp-Source: ABdhPJzQIP9csTmKKFsb6ePjGesI8bwoOQrWY6wayU13iVdMM+qAAdBkIEeF1BoLSTSem7rl0wLj6A== X-Received: by 2002:adf:8bca:: with SMTP id w10mr40176716wra.43.1634131439112; Wed, 13 Oct 2021 06:23:59 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id k10sm13044205wrh.64.2021.10.13.06.23.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Oct 2021 06:23:58 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Elijah Newren , =?utf-8?q?Martin_=C3=85gren?= , Andrzej Hunt , Jeff King , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH v3 2/3] sequencer: add a "goto cleanup" to do_reset() Date: Wed, 13 Oct 2021 15:23:54 +0200 Message-Id: X-Mailer: git-send-email 2.33.0.1569.gd2dc77f7abf In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Restructure code that's mostly added in 9055e401dd6 (sequencer: introduce new commands to reset the revision, 2018-04-25) to avoid code duplication, and to make freeing other resources easier in a subsequent commit. It's safe to initialize "tree_desc" to be zero'd out in order to unconditionally free desc.buffer, it won't be initialized on the first couple of "goto"'s. There are three earlier "return"'s in this function which should probably be made to use this new "cleanup" too, per [1] it looks like they're leaving behind stale locks. But let's not try to fix every potential bug here now, I'm just trying to narrowly plug a memory leak. 1. https://lore.kernel.org/git/CABPp-BH=3DP-dXRCphY53-3eZd1TU8h5GY_M12nnbEGm-UYB9Q@mail.gmail.com/ Signed-off-by: Ævar Arnfjörð Bjarmason --- sequencer.c | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/sequencer.c b/sequencer.c index b92dae12166..14c37c4e25b 100644 --- a/sequencer.c +++ b/sequencer.c @@ -3644,7 +3644,7 @@ static int do_reset(struct repository *r, struct strbuf ref_name = STRBUF_INIT; struct object_id oid; struct lock_file lock = LOCK_INIT; - struct tree_desc desc; + struct tree_desc desc = { 0 }; struct tree *tree; struct unpack_trees_options unpack_tree_opts; int ret = 0; @@ -3678,10 +3678,8 @@ static int do_reset(struct repository *r, strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name); if (get_oid(ref_name.buf, &oid) && get_oid(ref_name.buf + strlen("refs/rewritten/"), &oid)) { - error(_("could not read '%s'"), ref_name.buf); - rollback_lock_file(&lock); - strbuf_release(&ref_name); - return -1; + ret = error(_("could not read '%s'"), ref_name.buf); + goto cleanup; } } @@ -3697,24 +3695,18 @@ static int do_reset(struct repository *r, init_checkout_metadata(&unpack_tree_opts.meta, name, &oid, NULL); if (repo_read_index_unmerged(r)) { - rollback_lock_file(&lock); - strbuf_release(&ref_name); - return error_resolve_conflict(_(action_name(opts))); + ret = error_resolve_conflict(_(action_name(opts))); + goto cleanup; } if (!fill_tree_descriptor(r, &desc, &oid)) { - error(_("failed to find tree of %s"), oid_to_hex(&oid)); - rollback_lock_file(&lock); - free((void *)desc.buffer); - strbuf_release(&ref_name); - return -1; + ret = error(_("failed to find tree of %s"), oid_to_hex(&oid)); + goto cleanup; } if (unpack_trees(1, &desc, &unpack_tree_opts)) { - rollback_lock_file(&lock); - free((void *)desc.buffer); - strbuf_release(&ref_name); - return -1; + ret = -1; + goto cleanup; } tree = parse_tree_indirect(&oid); @@ -3722,13 +3714,15 @@ static int do_reset(struct repository *r, if (write_locked_index(r->index, &lock, COMMIT_LOCK) < 0) ret = error(_("could not write index")); - free((void *)desc.buffer); if (!ret) ret = update_ref(reflog_message(opts, "reset", "'%.*s'", len, name), "HEAD", &oid, NULL, 0, UPDATE_REFS_MSG_ON_ERR); - +cleanup: + free((void *)desc.buffer); + if (ret < 0) + rollback_lock_file(&lock); strbuf_release(&ref_name); return ret; } From patchwork Wed Oct 13 13:23:55 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12555885 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 162AEC433F5 for ; Wed, 13 Oct 2021 13:24:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 001EC610D0 for ; Wed, 13 Oct 2021 13:24:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235208AbhJMN0J (ORCPT ); Wed, 13 Oct 2021 09:26:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34362 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235047AbhJMN0F (ORCPT ); Wed, 13 Oct 2021 09:26:05 -0400 Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9DA87C061570 for ; Wed, 13 Oct 2021 06:24:01 -0700 (PDT) Received: by mail-wr1-x42a.google.com with SMTP id e12so8404343wra.4 for ; Wed, 13 Oct 2021 06:24:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=frzUh3p/VrJCbMvOprYoUKOhVYbnOk6VEkxuXCAQAig=; b=p5fHKsLbKuxsJ/J7jwS6j4yKrXeR+uEg3S6rAIFgziCNOBfjLx/4gohhjwxLw0PoiR IXVxrmAMBK/wdRR0xhKGIEOrJReXWaMWSXaPqjf80cowqvQVAGjFZzB/2nsQY4cILS3g lbOOQM72HZaOc6aHSq8GJeQleaufhsgJ2TwHfILi95ltKvdi9rgMusyq1L3Zcs9egir9 NVpaAkW4gRzGu7+kPFYjB0lZ1/82JM2E+m2tzPXgFUVo9Ipa8/oAi04pkwgey7YM65jf /4f7ia72VZgAH2X6cNExppfqbTQ8wrduvS9isvI45GI0b2vRViHT5fruXNtauRaZwHdL Rh+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=frzUh3p/VrJCbMvOprYoUKOhVYbnOk6VEkxuXCAQAig=; b=JAnk1jW4kKW96gv3XJMpX0+ehrvf1CcneDObkYQ4AzITSJBt8feuSiKfPoE5aj57ul 7yjpSxDEqbnF5v9Z5N4p0U7Ulanpowspjw0sJbGxosge8Z+xTW/bRuWGnb8HaP1k1vUp m9JH6+Q3wGR6rEnn9Jn3Piu0WOOiENWc1VwDtJkiVW27tZcefABR4fudjT3bQ+nrrEqE auGSyujO3AFNhCgZdJGzyNDE41qMiZE1GUG8Td6RkQAxzFlVeLP8TSa3peELdJXrpDun bSGDClYN1yeb9a7lGTyguReIugPMW/5r0kpY2vG6MQDTzd4SNMS7ZYo91jFDgZTkrodE Zf6w== X-Gm-Message-State: AOAM530W469si4RXWkV0MeSKL507BjXrJAvs0ETxfJ8YCQZHErxiwnCg ueNCFN6H2FDWQuYycQt8PsCVT4Lxjy87rA== X-Google-Smtp-Source: ABdhPJzBOut9oux93AJTQkCmDA1xx/WlOuVtVZ0luOkp/7oLUvoAyqkLWCnL2FDHyK83MUr0rWAgkQ== X-Received: by 2002:a5d:64e9:: with SMTP id g9mr39821759wri.99.1634131439890; Wed, 13 Oct 2021 06:23:59 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id k10sm13044205wrh.64.2021.10.13.06.23.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Oct 2021 06:23:59 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Elijah Newren , =?utf-8?q?Martin_=C3=85gren?= , Andrzej Hunt , Jeff King , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= Subject: [PATCH v3 3/3] sequencer: fix a memory leak in do_reset() Date: Wed, 13 Oct 2021 15:23:55 +0200 Message-Id: X-Mailer: git-send-email 2.33.0.1569.gd2dc77f7abf In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Fix a memory leak introduced in 9055e401dd6 (sequencer: introduce new commands to reset the revision, 2018-04-25), which called setup_unpack_trees_porcelain() without a corresponding call to clear_unpack_trees_porcelain(). This introduces a change in behavior in that we now start calling clear_unpack_trees_porcelain() even without having called the setup_unpack_trees_porcelain(). That's OK, that clear function, like most others, will accept a zero'd out struct. This inches us closer to passing various tests in "t34*.sh" (e.g. "t3434-rebase-i18n.sh"), but because they have so many other memory leaks in revisions.c this doesn't make any test file or even a single test pass. Signed-off-by: Ævar Arnfjörð Bjarmason --- sequencer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sequencer.c b/sequencer.c index 14c37c4e25b..98181b3186e 100644 --- a/sequencer.c +++ b/sequencer.c @@ -3646,7 +3646,7 @@ static int do_reset(struct repository *r, struct lock_file lock = LOCK_INIT; struct tree_desc desc = { 0 }; struct tree *tree; - struct unpack_trees_options unpack_tree_opts; + struct unpack_trees_options unpack_tree_opts = { 0 }; int ret = 0; if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0) @@ -3683,7 +3683,6 @@ static int do_reset(struct repository *r, } } - memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts)); setup_unpack_trees_porcelain(&unpack_tree_opts, "reset"); unpack_tree_opts.head_idx = 1; unpack_tree_opts.src_index = r->index; @@ -3724,6 +3723,7 @@ static int do_reset(struct repository *r, if (ret < 0) rollback_lock_file(&lock); strbuf_release(&ref_name); + clear_unpack_trees_porcelain(&unpack_tree_opts); return ret; }