From patchwork Wed Apr 13 20:01:30 2022 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: 12812591 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7F496C433EF for ; Wed, 13 Apr 2022 20:02:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238429AbiDMUEa (ORCPT ); Wed, 13 Apr 2022 16:04:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40644 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237064AbiDMUEZ (ORCPT ); Wed, 13 Apr 2022 16:04:25 -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 EBE6D7B11A for ; Wed, 13 Apr 2022 13:02:02 -0700 (PDT) Received: by mail-wr1-x431.google.com with SMTP id u3so4183786wrg.3 for ; Wed, 13 Apr 2022 13:02:02 -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=GHRToQrz9QKAB4m2zIRGMfyIlWitgIA3L4bUAY0kmqk=; b=YJoOR2R+3b+B6Hh7Lj8KNeZofXbv3IO3r8Wk5UkI2qi2u4Cu1LwA5sz37c1SvfdBm+ u2iQTlMtJ5mb+rOU8pDSy5I50mFOkwY4HUHOlvajZZDYk/9RuDKbVgvH6Su6HN+12cqx RiPUUzSVXQR7KWmNu0E5YKrXUEA4ZhzUcDG0dPsw4xB4ywBf8FJDuo/rono+dyWE8QyZ GrCWBWxq227Al4HfwLYa5PIl0bW5x2fLpub03bCBTrxTdpsgzUWbqMrGU42raQZITMFb QeNWhDgsRJsdiLF0TpmUh/BunIo/qQ0KI7O9Naefe43+h9XN7Dy51eDfw7p0Aw0CHTBE bDEQ== 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=GHRToQrz9QKAB4m2zIRGMfyIlWitgIA3L4bUAY0kmqk=; b=hSIJpS/dhuBRr/qyJ2SYGAhBteXSsi6AUzedzzb0+i5vu1D3JxI5gBxi4UrHksEfvv b6mWJjh1XrBU1/Vv9fgdpHhx6WTZbN09Z8tmrgh8jqemg9sVeQ1NWxJ2DTbV0pWoiBSd H9DP/LTWbK8Wjb1qLTDjB9sAOUk4IW2mUMZbtAPAOtJ/C4+ymkM6Ao9MteFJB5d+u8LZ QBtsDg1ZkUqMxC/9nz/HkEYZ5OwofYjaQT8WlNPhYEuXwp6UO8eCQdOEc5iANM6fX+zN se2qx2rUIHoWjVtfwRqKpTJ28Tuvmr94yPIlkof2tZBBtzEshE+YZ5mLseImu7pBfwhz SF1w== X-Gm-Message-State: AOAM533WvM5SiufU+9LeRX/xJgPa5QV5yYPMLWbrg7g6YJss1W7ZqxTT qXwgIDcFxvaV/BW+GqlggtphtvRgaHDedg== X-Google-Smtp-Source: ABdhPJzX76wbYgSKEsSdh0idFNFHwxNCT4XuIvGpJCBjxVTIh3mL0vF0gs9p5e9kyYis9Qk7VrYhBg== X-Received: by 2002:a5d:5981:0:b0:204:1da7:93d7 with SMTP id n1-20020a5d5981000000b002041da793d7mr332129wri.621.1649880121335; Wed, 13 Apr 2022 13:02:01 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:00 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 01/27] t/helper/test-fast-rebase.c: don't leak "struct strbuf" Date: Wed, 13 Apr 2022 22:01:30 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Fix a memory leak that's been with us since f9500261e0a (fast-rebase: write conflict state to working tree, index, and HEAD, 2021-05-20) changed this code to move these strbuf_release() into an if/else block. We'll also add to "reflog_msg" in the "else" arm of the "if" block being modified here, and we'll append to "branch_msg" in both cases. But after f9500261e0a only the "if" block would free these two "struct strbuf". Signed-off-by: Ævar Arnfjörð Bjarmason --- t/helper/test-fast-rebase.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/t/helper/test-fast-rebase.c b/t/helper/test-fast-rebase.c index fc2d4609043..993b90eaedd 100644 --- a/t/helper/test-fast-rebase.c +++ b/t/helper/test-fast-rebase.c @@ -201,8 +201,6 @@ int cmd__fast_rebase(int argc, const char **argv) } if (create_symref("HEAD", branch_name.buf, reflog_msg.buf) < 0) die(_("unable to update HEAD")); - strbuf_release(&reflog_msg); - strbuf_release(&branch_name); prime_cache_tree(the_repository, the_repository->index, result.tree); @@ -221,5 +219,8 @@ int cmd__fast_rebase(int argc, const char **argv) if (write_locked_index(&the_index, &lock, COMMIT_LOCK | SKIP_IF_UNCHANGED)) die(_("unable to write %s"), get_index_file()); + + strbuf_release(&reflog_msg); + strbuf_release(&branch_name); return (result.clean == 0); } From patchwork Wed Apr 13 20:01:31 2022 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: 12812592 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C79B2C433F5 for ; Wed, 13 Apr 2022 20:02:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238562AbiDMUEc (ORCPT ); Wed, 13 Apr 2022 16:04:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40656 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237901AbiDMUEZ (ORCPT ); Wed, 13 Apr 2022 16:04:25 -0400 Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [IPv6:2a00:1450:4864:20::32a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DCD5D7B10B for ; Wed, 13 Apr 2022 13:02:03 -0700 (PDT) Received: by mail-wm1-x32a.google.com with SMTP id i82-20020a1c3b55000000b0038ccb70e239so49851wma.3 for ; Wed, 13 Apr 2022 13:02:03 -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=nesxkZYZ/0PBEoIKbE3RBattmraU2kVADCWpgCIQW5A=; b=HtuZElzxr5jfgaZwOQGkiaSI8bQaSzRN5UeWumzQumctnbC97/1LPOtCLX4pjjbLTb E6vKcBTYnMowrTUM894FIeFiEmm8GRApSXm+JQ/t9g6h3G89HrQe2eehTJyURnkVBM3z 7W6+Y036JlULM1S/Dj/25oZjRbpltRA2r0TrvkZZo1r0hFBRXLdPCYPKXpUYRB3RazzM c93jmXrfeEXZL6RbemIdMRL6n2bJV/0OljRUpQnX8r8FyJySPJ8eLxUIegHOh6vLLhwD Nj9A4iGFN5duyVDTTtr0N5w1+wFO9Kxg0h1ueDRDVngQ5JCuNDBLxuZ1yC5eo+q6zhDY oXUA== 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=nesxkZYZ/0PBEoIKbE3RBattmraU2kVADCWpgCIQW5A=; b=mYsJKRNGamF9kMn175/3rbD38ZE4XVME3b2il2ZrTG00wWLlbmU5vtLsrz24JgR7sh GQ5+y0YuKNcOal7/ZEsPKazKVxJCb9e+mgLQZmG8fIAIYo5pYBHzYkKJif9zQ/MBIlRu A/ZXF3uotOOytHRBsjplFQuwbd9DN5oZCYaxWrLf/MDzNZ4D3kc5yaN3fgiAh85sRwPO gBbsjcMs8ysmDONz07V6tozPc7Arv//rAi4Qk/EVN0sZEFtpoUAyk7jNl9fsBqoeQEm6 rToAIUUOlpKrTryLoOVj2W1RZDoW+PLOLroZluqBuJ+tDdiKCTe4DxMgD66DXqBYEuO5 fzEA== X-Gm-Message-State: AOAM531tKS8U4aoX2NQXon6LnWrhnsTftx/1EQBxhjr+8jHwSw/ZR+oU j+oYD1h3jSrqwW+0ZJf9NAhkNc/xiHr0fw== X-Google-Smtp-Source: ABdhPJyzBeTNhoswiflN5FN/ubPn0cH35OViNzH4Fz4OZvOf6YQJFt77EyZDiz/uXNt6x/HfWwP0Ew== X-Received: by 2002:a05:600c:4e4d:b0:38f:11ed:595 with SMTP id e13-20020a05600c4e4d00b0038f11ed0595mr326737wmq.64.1649880122257; Wed, 13 Apr 2022 13:02:02 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:01 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 02/27] blame: use "goto cleanup" for cleanup_scoreboard() Date: Wed, 13 Apr 2022 22:01:31 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Amend a freeing pattern added in 0906ac2b54b (blame: use changed-path Bloom filters, 2020-04-16) to use a "goto cleanup", so that we can be sure that we call cleanup_scoreboard(). Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/blame.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/builtin/blame.c b/builtin/blame.c index 8d15b68afc9..885b381ab83 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -1167,7 +1167,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix) if (!incremental) setup_pager(); else - return 0; + goto cleanup; blame_sort_final(&sb); @@ -1201,6 +1201,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix) printf("num commits: %d\n", sb.num_commits); } +cleanup: cleanup_scoreboard(&sb); return 0; } From patchwork Wed Apr 13 20:01:32 2022 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: 12812593 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C05BDC433F5 for ; Wed, 13 Apr 2022 20:02:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238572AbiDMUEe (ORCPT ); Wed, 13 Apr 2022 16:04:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40670 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238123AbiDMUE1 (ORCPT ); Wed, 13 Apr 2022 16:04:27 -0400 Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0D7FA7B11A for ; Wed, 13 Apr 2022 13:02:05 -0700 (PDT) Received: by mail-wm1-x333.google.com with SMTP id m15-20020a7bca4f000000b0038fdc1394b1so1158910wml.2 for ; Wed, 13 Apr 2022 13:02:04 -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=uSVxdNhwrv9fPSK8q0WpGsvCbpg6dgi5S1TxeJMIpKM=; b=eHTAeb/v4sMH0Vk64ACMmrXVFRoEZI6kDjv7XJ8oMG+jBOUsjLgU+62+WdK3JJcI7q NAiqE+z5hc8j4TrHxlLV1SRI5KSW7NzWQSv8FU+c/xf8sgWjPSEFbee59HehkH46AqiS HwOyyJTmYhGIHokqkHS11WH7s9oOVIuy32za3eVQtC9opX5W1X9LnSYkslzKeLy9YPU7 GpNJ490kdG2LE9O9oNEODrbfOqn6LHXnqtUPOyV91j7sqR2WglGGYnWdPD7D5E24oeJ6 aJuJdPiagZSCC/mlLCPSlVLyw6BWCnJTXGV++1U7cPtKxscWiQgWJdG8GlOsukxVVmvm vLKw== 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=uSVxdNhwrv9fPSK8q0WpGsvCbpg6dgi5S1TxeJMIpKM=; b=PKKtxJxE2TcJND7s+Y4CmNn88o5cg/0bHreqEIdD+0dgk5lXUqcXPHZX9T9DZJwX6T PSd28ys0hejKAXznnPAl/uJv3jFVazD/HjNqzgzZVK4m/BDqFh/edQzbDYRkTDXKZom9 V+i1WDNfci4wSlsvFvw2sIeKxtxlxsd0Y3I8h4BDUfyLrhN48vTssbcif+rStM6KVQX/ HYQET7ELjyoHfKyoN8IJHLKiC8FZBAbeq40UIxYzk5yv6gEEAg8D9VEBrfSEfMpplBKr KtmhdWldTF8Ncy/ppwRO+ISWHTaAWUniY4b62HNKbklYEXDoGoafQ/l5rOIoo4Rff5p8 64QA== X-Gm-Message-State: AOAM533u9VrjqDkauZaRuxCYyRwPQIUntCjjmSpJebETrtBMiRkbJb4Q 5BzQvn9awahzM6pWQJi5xMTWgiX8jERReA== X-Google-Smtp-Source: ABdhPJwyi9w4yNmrEL2LF+zFSmmDZc2oQaOY2ICN2zdoBOSYdpXGs96BoI2HGm/w1cncarF7GNRffQ== X-Received: by 2002:a05:600c:4e12:b0:38b:b715:18a6 with SMTP id b18-20020a05600c4e1200b0038bb71518a6mr296615wmq.17.1649880123328; Wed, 13 Apr 2022 13:02:03 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:02 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 03/27] string_list API users: use string_list_init_{no,}dup Date: Wed, 13 Apr 2022 22:01:32 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Follow-up on the introduction of string_list_init_nodup() and string_list_init_dup() in the series merged in bd4232fac33 (Merge branch 'ab/struct-init', 2021-07-16) and convert code that implicitly relied on xcalloc() being equivalent to the initializer to use xmalloc() and string_list_init_{no,}dup() instead. In the case of get_unmerged() in merge-recursive.c we used the combination of xcalloc() and assigning "1" to "strdup_strings" to get what we'd get via string_list_init_dup(), let's use that instead. Adjacent code in cmd_format_patch() will be changed in a subsequent commit, since we're changing that let's change the other in-tree patterns that do the same. Let's also convert a "x == NULL" to "!x" per our CodingGuidelines, as we need to change the "if" line anyway. Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/log.c | 9 ++++++--- builtin/shortlog.c | 6 ++++-- merge-recursive.c | 4 ++-- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/builtin/log.c b/builtin/log.c index c211d66d1d0..634dc782cce 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -231,7 +231,8 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix, } if (mailmap) { - rev->mailmap = xcalloc(1, sizeof(struct string_list)); + rev->mailmap = xmalloc(sizeof(struct string_list)); + string_list_init_nodup(rev->mailmap); read_mailmap(rev->mailmap); } @@ -2173,8 +2174,10 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) prepare_bases(&bases, base, list, nr); } - if (in_reply_to || thread || cover_letter) - rev.ref_message_ids = xcalloc(1, sizeof(struct string_list)); + if (in_reply_to || thread || cover_letter) { + rev.ref_message_ids = xmalloc(sizeof(*rev.ref_message_ids)); + string_list_init_nodup(rev.ref_message_ids); + } if (in_reply_to) { const char *msgid = clean_message_id(in_reply_to); string_list_append(rev.ref_message_ids, msgid); diff --git a/builtin/shortlog.c b/builtin/shortlog.c index 26c5c0cf935..fcde07c9367 100644 --- a/builtin/shortlog.c +++ b/builtin/shortlog.c @@ -81,8 +81,10 @@ static void insert_one_record(struct shortlog *log, format_subject(&subject, oneline, " "); buffer = strbuf_detach(&subject, NULL); - if (item->util == NULL) - item->util = xcalloc(1, sizeof(struct string_list)); + if (!item->util) { + item->util = xmalloc(sizeof(struct string_list)); + string_list_init_nodup(item->util); + } string_list_append(item->util, buffer); } } diff --git a/merge-recursive.c b/merge-recursive.c index 1ee6364e8b1..32bbba5fbb1 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -522,10 +522,10 @@ static struct stage_data *insert_stage_data(struct repository *r, */ static struct string_list *get_unmerged(struct index_state *istate) { - struct string_list *unmerged = xcalloc(1, sizeof(struct string_list)); + struct string_list *unmerged = xmalloc(sizeof(struct string_list)); int i; - unmerged->strdup_strings = 1; + string_list_init_dup(unmerged); /* TODO: audit for interaction with sparse-index. */ ensure_full_index(istate); From patchwork Wed Apr 13 20:01:33 2022 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: 12812594 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DD397C433EF for ; Wed, 13 Apr 2022 20:02:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238578AbiDMUEf (ORCPT ); Wed, 13 Apr 2022 16:04:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40684 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238149AbiDMUE2 (ORCPT ); Wed, 13 Apr 2022 16:04:28 -0400 Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 325687521D for ; Wed, 13 Apr 2022 13:02:06 -0700 (PDT) Received: by mail-wm1-x329.google.com with SMTP id v64-20020a1cac43000000b0038cfd1b3a6dso4664106wme.5 for ; Wed, 13 Apr 2022 13:02:06 -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=7SPqvZdYHZt5Nxmnf5XURbVO1MvBp/Z62eGn0dbICqk=; b=XYfKS2VY3YULxUdGhgc2XOaglsA9LrCwX7spGMcqXSPi/N0GSPLyKrtZWYBMOBJV/9 SqHF8TxuA7h4zapdQpf3YtrXUzSzw4Fapm4+6JBr0NXNHZAC/QB+XWr1/UJV8R7CVxOR k1rkUJbsE7/8RAqenvCC8Smi7542LLockSWSOQkvoxA6ygIYpKekgBOBOny6FAp3yRAS SI+McIyMGEz8kzcJ63K4v6LJn3Q6vPFb6EH+8RqD7uR4DellC4cSZDr1bgEq+VhDx5I2 xkYlGZVmGaWp1yhtMzX7NpESvEgSICEaujWrCkx2CqtfpNHGwmbyqe7vAllmr+MrP9S9 HZJA== 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=7SPqvZdYHZt5Nxmnf5XURbVO1MvBp/Z62eGn0dbICqk=; b=klmw16ODJWAgfm+zHXq9i2sownAV0G/IVH1dWDnymZSkBh4rN1bOAGdJH4c9my6Epm ykRKtFjeZAhiC+V9P9Szi2XsAD0c2hxcDR7X/ZYgQnYGfduDyimVGx1Q4QbLQbDqL6D7 Hqd9TydgKcpl1ZSG0Gk5WToDSyQcoTDs+D8BRnPgPYbFuFUGNUIXgcpY9giyIt7W1l4r vljRQdmqAB+PPl6j1hgohQgFh7+7q9jYs5Dl5OO8sDtbPIsUckexlhrSuZijYPD2Li98 XGyJhxIYbs0OqKoPl2psvpXsZMm/0T7RAI/clDb5rkZmTyxZhQ6jH0nt8qA1LkikiAMk WiXA== X-Gm-Message-State: AOAM530M7/QkdSMRMWTB6MMkNJGBCAcKpuAdJ4cly1OSVvoyV2lsQRI9 0McGORyWozzPbfQ6SNFduQAICkzTqiUI/Q== X-Google-Smtp-Source: ABdhPJyu7XUgAHJhiUtfDnbhLit7pKXTGe8uB0B3A7h2oTC49hvWiR4kg6A30MPpLNRWGKmsfKyTUQ== X-Received: by 2002:a05:600c:3ba9:b0:38e:c8c6:ae0d with SMTP id n41-20020a05600c3ba900b0038ec8c6ae0dmr316693wms.120.1649880124493; Wed, 13 Apr 2022 13:02:04 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:03 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 04/27] format-patch: don't leak "extra_headers" or "ref_message_ids" Date: Wed, 13 Apr 2022 22:01:33 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Fix two memory leaks in "struct rev_info" by freeing that memory in cmd_format_patch(). These two are unusual special-cases in being in the "struct rev_info", but not being "owned" by the code in revision.c. I.e. they're members of the struct so that this code in "builtin/log.c" can conveniently pass information code in "log-tree.c". See e.g. the make_cover_letter() caller of log_write_email_headers() here in "builtin/log.c", and [1] for a demonstration of where the "extra_headers" and "ref_message_ids" struct members are used. See 20ff06805c6 (format-patch: resurrect extra headers from config, 2006-06-02) and d1566f7883f (git-format-patch: Make the second and subsequent mails replies to the first, 2006-07-14) for the initial introduction of "extra_headers" and "ref_message_ids". We can count on repo_init_revisions() memset()-ing this data to 0 however, so we can count on it being either NULL or something we allocated. In the case of "extra_headers" let's add a local "char *" variable to hold it, to avoid the eventual cast from "const char *" when we free() it. 1. https://lore.kernel.org/git/220401.868rsoogxf.gmgdl@evledraar.gmail.com/ Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/log.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/builtin/log.c b/builtin/log.c index 634dc782cce..6f9928fabfe 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -1747,6 +1747,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) struct commit *commit; struct commit **list = NULL; struct rev_info rev; + char *to_free = NULL; struct setup_revision_opt s_r_opt; int nr = 0, total, i; int use_stdout = 0; @@ -1947,7 +1948,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) strbuf_addch(&buf, '\n'); } - rev.extra_headers = strbuf_detach(&buf, NULL); + rev.extra_headers = to_free = strbuf_detach(&buf, NULL); if (from) { if (split_ident_line(&rev.from_ident, from, strlen(from))) @@ -2284,6 +2285,10 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) strbuf_release(&rdiff1); strbuf_release(&rdiff2); strbuf_release(&rdiff_title); + free(to_free); + if (rev.ref_message_ids) + string_list_clear(rev.ref_message_ids, 0); + free(rev.ref_message_ids); UNLEAK(rev); return 0; } From patchwork Wed Apr 13 20:01:34 2022 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: 12812595 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5289EC433F5 for ; Wed, 13 Apr 2022 20:02:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238580AbiDMUEg (ORCPT ); Wed, 13 Apr 2022 16:04:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40690 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234447AbiDMUE3 (ORCPT ); Wed, 13 Apr 2022 16:04:29 -0400 Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2DEEB7B10B for ; Wed, 13 Apr 2022 13:02:07 -0700 (PDT) Received: by mail-wm1-x32c.google.com with SMTP id v64-20020a1cac43000000b0038cfd1b3a6dso4664130wme.5 for ; Wed, 13 Apr 2022 13:02:07 -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=dFI3cRmC6pe0JsWsXgxWU9gQmpy/VHl2mdKujlQOz30=; b=UY28qlR+w6K4RBeocjpBoDJmZP3eTWxo2eG7EhzWWqyqM8BtGuN3Qc+NFeyOfrUsJv 9xHlvOmfuteJ+ClIm4HwmBRMw5Ao+r6DrBOv4ov65c3HAyUMacnpn7248AgsqPnacrw2 e+kVoRBWEqVttNGagT4T5ycpbFivt6o6/DfnpxWmVRVSQbrfp0cuHAKkU8n/8ceoDOi3 nsP0AFYJ4aje7Y6VGBLQUSTNTdoVaZfoUtH+H64O/xMJGcDu7jse2kcDvWhlMZcNmLoo lLqYI2u3JG0vltAQAuxDYrOaEbzBRsK8c0BWnIOvC/19d0KV1FbLi59ZFgwffJkFwyji v2Nw== 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=dFI3cRmC6pe0JsWsXgxWU9gQmpy/VHl2mdKujlQOz30=; b=3AhEh9DMjBn4lvEE7SmPDYlzVvF0PfpRlDDPYAJGAfwm6bd1bCxm261ukbPlI/KqAO mW5HaY9ruPl/aVpClQD2zpSjwzqI209Fw4ZCKE4j0e5BQJ0vh3IQwEq0vI42GCeaaoiK TWX/S5EYTQGbMIzsYW2al34jCNjJmSTEBop0AvMFWhtfhEJg3T0FZK9FYHJrYBAs2n9M ghFaohvoJUyXEQxSLAiTbv//33/wFaqIg0+D45Aw4U+ZZc22vvs7jFsiTW43RYCublwX Vvdp3nSme4MjdQbne3lKmcq4Ww/N+he0qJb8bgFG1vuuwCyrWstKWUcZimHGfJqP+OGc 1mdQ== X-Gm-Message-State: AOAM532DwOP8agzBITiqX8WCqT4YBwfvkpI/TPwr8pj9vxrCBER80+9r cFjKI45Zc7J61yNE2aQI83xjyUsUCcuoEg== X-Google-Smtp-Source: ABdhPJy62hS26ZtqJugFHeS8ra+5b4Kk3cPMgS7phhQkCGpAzm/dpu1KREDadXN5Qe6isxxa/CSFFQ== X-Received: by 2002:a05:600c:1e85:b0:38c:ef05:ba5d with SMTP id be5-20020a05600c1e8500b0038cef05ba5dmr284192wmb.119.1649880125454; Wed, 13 Apr 2022 13:02:05 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:04 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 05/27] cocci: add and apply free_commit_list() rules Date: Wed, 13 Apr 2022 22:01:34 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Add and apply coccinelle rules to remove "if (E)" before "free_commit_list(E)", the function can accept NULL, and further change cases where "E = NULL" followed to also be unconditionally. The code changes in this commit were entirely made by the coccinelle rule being added here, and applied with: make contrib/coccinelle/free.cocci.patch patch -p1 Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/rev-list.c | 6 ++---- commit.c | 19 ++++++++----------- contrib/coccinelle/free.cocci | 27 +++++++++++++++++++++++++++ revision.c | 17 ++++++----------- submodule.c | 6 ++---- 5 files changed, 45 insertions(+), 30 deletions(-) diff --git a/builtin/rev-list.c b/builtin/rev-list.c index 572da1472e5..07c0ad11d8d 100644 --- a/builtin/rev-list.c +++ b/builtin/rev-list.c @@ -213,10 +213,8 @@ static void show_commit(struct commit *commit, void *data) static void finish_commit(struct commit *commit) { - if (commit->parents) { - free_commit_list(commit->parents); - commit->parents = NULL; - } + free_commit_list(commit->parents); + commit->parents = NULL; free_commit_buffer(the_repository->parsed_objects, commit); } diff --git a/commit.c b/commit.c index 59b6c3e4552..9628716bf2f 100644 --- a/commit.c +++ b/commit.c @@ -407,17 +407,14 @@ int parse_commit_buffer(struct repository *r, struct commit *item, const void *b if (item->object.parsed) return 0; - - if (item->parents) { - /* - * Presumably this is leftover from an earlier failed parse; - * clear it out in preparation for us re-parsing (we'll hit the - * same error, but that's good, since it lets our caller know - * the result cannot be trusted. - */ - free_commit_list(item->parents); - item->parents = NULL; - } + /* + * Presumably this is leftover from an earlier failed parse; + * clear it out in preparation for us re-parsing (we'll hit the + * same error, but that's good, since it lets our caller know + * the result cannot be trusted. + */ + free_commit_list(item->parents); + item->parents = NULL; tail += size; if (tail <= bufptr + tree_entry_len + 1 || memcmp(bufptr, "tree ", 5) || diff --git a/contrib/coccinelle/free.cocci b/contrib/coccinelle/free.cocci index 4490069df96..6fb9eb6e883 100644 --- a/contrib/coccinelle/free.cocci +++ b/contrib/coccinelle/free.cocci @@ -2,13 +2,21 @@ expression E; @@ - if (E) +( free(E); +| + free_commit_list(E); +) @@ expression E; @@ - if (!E) +( free(E); +| + free_commit_list(E); +) @@ expression E; @@ -16,3 +24,22 @@ expression E; - free(E); + FREE_AND_NULL(E); - E = NULL; + +@@ +expression E; +@@ +- if (E) +- { + free_commit_list(E); + E = NULL; +- } + +@@ +expression E; +statement S; +@@ +- if (E) { ++ if (E) + S + free_commit_list(E); +- } diff --git a/revision.c b/revision.c index 7d435f80480..4963ba7def8 100644 --- a/revision.c +++ b/revision.c @@ -1456,10 +1456,9 @@ static int limit_list(struct rev_info *revs) if (revs->left_only || revs->right_only) limit_left_right(newlist, revs); - if (bottom) { + if (bottom) limit_to_ancestry(bottom, newlist); - free_commit_list(bottom); - } + free_commit_list(bottom); /* * Check if any commits have become TREESAME by some of their parents @@ -4080,10 +4079,8 @@ static void create_boundary_commit_list(struct rev_info *revs) * boundary commits anyway. (This is what the code has always * done.) */ - if (revs->commits) { - free_commit_list(revs->commits); - revs->commits = NULL; - } + free_commit_list(revs->commits); + revs->commits = NULL; /* * Put all of the actual boundary commits from revs->boundary_commits @@ -4220,10 +4217,8 @@ struct commit *get_revision(struct rev_info *revs) graph_update(revs->graph, c); if (!c) { free_saved_parents(revs); - if (revs->previous_parents) { - free_commit_list(revs->previous_parents); - revs->previous_parents = NULL; - } + free_commit_list(revs->previous_parents); + revs->previous_parents = NULL; } return c; } diff --git a/submodule.c b/submodule.c index 86c8f0f89db..9b715b4a5cb 100644 --- a/submodule.c +++ b/submodule.c @@ -645,8 +645,7 @@ void show_submodule_diff_summary(struct diff_options *o, const char *path, print_submodule_diff_summary(sub, &rev, o); out: - if (merge_bases) - free_commit_list(merge_bases); + free_commit_list(merge_bases); clear_commit_marks(left, ~0); clear_commit_marks(right, ~0); if (sub) { @@ -735,8 +734,7 @@ void show_submodule_inline_diff(struct diff_options *o, const char *path, done: strbuf_release(&sb); - if (merge_bases) - free_commit_list(merge_bases); + free_commit_list(merge_bases); if (left) clear_commit_marks(left, ~0); if (right) From patchwork Wed Apr 13 20:01:35 2022 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: 12812596 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 90935C433EF for ; Wed, 13 Apr 2022 20:02:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232665AbiDMUEo (ORCPT ); Wed, 13 Apr 2022 16:04:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40718 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238540AbiDMUEb (ORCPT ); Wed, 13 Apr 2022 16:04:31 -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 39AC27521D for ; Wed, 13 Apr 2022 13:02:08 -0700 (PDT) Received: by mail-wr1-x431.google.com with SMTP id b19so4141121wrh.11 for ; Wed, 13 Apr 2022 13:02:08 -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=N9yHSgglAYI3aqoobTMwGtilusId8b46hzecHwrbpLU=; b=DeQQVkxQV9E9gTMqNg6x2cabzFuR4S/tErK2SPlgyU0M47B5V0n1RKCtzuFAUt7D3p 8ArFnKIRNPTtIv/u4uh/j0MfiUU04VL1+k13ZkyoAOCgiSuKYWsKAE76yoE+xtcTjCm4 6fLejeb4+FVcvF1pl7ehDxcajcJLUtSuLBMfPPtcLknM0zqOgPi76EjFYPGcA5KUugiH u13BViMB8bwfjZAgzCZBDdpBrjBIh1F9JwZURL9oCi2pM0AFB+6ldOKk7zNgfa0ok096 vq1LZENb6RR0NrHFuEw6wxdY6IYkoFHmwlcypBh8NnAkKuLx9p8SIysoBfSITYNVa2xE pExw== 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=N9yHSgglAYI3aqoobTMwGtilusId8b46hzecHwrbpLU=; b=70BSE6vhygsHHAaBSOWGmRybonnelhEizbDahr9nTUx6InlOAwKRkBISxvn6QCi2+O lRZMJL/2vO6r8BHXi+AmU/xlIsZ0wjRsdt22fdl9WGS/gCi8XJ6tXT+14mKhvL8Vx0Wn mX7tXGSUmg90czmaIYIeW/tk+2KzKUuoc6ji0BoxkESYCbHFvdLyFoso4HUmZnsq+u+n w+hKPcqEVKZ6I35AQPeT/s8KpNFUBSghetL63Q3UQRQewGrE26Lc2Ja+KRJeywl8W1Z2 AW866dv6oj4g06PdutWv2gpaec7VLBvkj0A3Gzq6cZgFJrOPR0287zJ1ndPX63BfMxoH Zahg== X-Gm-Message-State: AOAM531Eoov+eY+QJk6Eh0boQlV9c8eRXkl+z5pQTENbLGMytsKX68u3 u6VA9uZLpAKBDCVR78sl66ffjk7oty0IXw== X-Google-Smtp-Source: ABdhPJxsisiGIftjV3viuBcgYZ5/9crnWJywsNlVN5jIruydbIAoUpOH4r/BKnr9T6ePPxfKqwjsRQ== X-Received: by 2002:a5d:588b:0:b0:207:b922:5f3c with SMTP id n11-20020a5d588b000000b00207b9225f3cmr354510wrf.166.1649880126499; Wed, 13 Apr 2022 13:02:06 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:05 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 06/27] revision.[ch]: provide and start using a release_revisions() Date: Wed, 13 Apr 2022 22:01:35 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org The users of the revision.[ch] API's "struct rev_info" are a major source of memory leaks in the test suite under SANITIZE=leak, which in turn adds a lot of noise when trying to mark up tests with "TEST_PASSES_SANITIZE_LEAK=true". The users of that API are largely one-shot, e.g. "git rev-list" or "git log", or the "git checkout" and "git stash" being modified here For these callers freeing the memory is arguably a waste of time, but in many cases they've actually been trying to free the memory, and just doing that in a buggy manner. Let's provide a release_revisions() function for these users, and start migrating them over per the plan outlined in [1]. Right now this only handles the "pending" member of the struct, but more will be added in subsequent commits. Even though we only clear the "pending" member now, let's not leave a trap in code like the pre-image of index_differs_from(), where we'd start doing the wrong thing as soon as the release_revisions() learned to clear its "diffopt". I.e. we need to call release_revisions() after we've inspected any state in "struct rev_info". This leaves in place e.g. clear_pathspec(&rev.prune_data) in stash_working_tree() in builtin/stash.c, subsequent commits will teach release_revisions() to free "prune_data" and other members that in some cases are individually cleared by users of "struct rev_info" by reaching into its members. Those subsequent commits will remove the relevant calls to e.g. clear_pathspec(). We avoid amending code in index_differs_from() in diff-lib.c as well as wt_status_collect_changes_index(), has_unstaged_changes() and has_uncommitted_changes() in wt-status.c in a way that assumes that we are already clearing the "diffopt" member. That will be handled in a subsequent commit. 1. https://lore.kernel.org/git/87a6k8daeu.fsf@evledraar.gmail.com/ Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/checkout.c | 2 +- builtin/stash.c | 5 ++--- diff-lib.c | 2 +- range-diff.c | 2 +- revision.c | 5 +++++ revision.h | 6 ++++++ wt-status.c | 5 +++-- 7 files changed, 19 insertions(+), 8 deletions(-) diff --git a/builtin/checkout.c b/builtin/checkout.c index 797681481d1..4d9e0bd3ac1 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -629,7 +629,7 @@ static void show_local_changes(struct object *head, diff_setup_done(&rev.diffopt); add_pending_object(&rev, head, NULL); run_diff_index(&rev, 0); - object_array_clear(&rev.pending); + release_revisions(&rev); } static void describe_detached_head(const char *msg, struct commit *commit) diff --git a/builtin/stash.c b/builtin/stash.c index 0c7b6a95882..74fa810cf8c 100644 --- a/builtin/stash.c +++ b/builtin/stash.c @@ -1047,7 +1047,6 @@ static int check_changes_tracked_files(const struct pathspec *ps) goto done; } - object_array_clear(&rev.pending); result = run_diff_files(&rev, 0); if (diff_result_code(&rev.diffopt, result)) { ret = 1; @@ -1056,6 +1055,7 @@ static int check_changes_tracked_files(const struct pathspec *ps) done: clear_pathspec(&rev.prune_data); + release_revisions(&rev); return ret; } @@ -1266,9 +1266,8 @@ static int stash_working_tree(struct stash_info *info, const struct pathspec *ps done: discard_index(&istate); - UNLEAK(rev); - object_array_clear(&rev.pending); clear_pathspec(&rev.prune_data); + release_revisions(&rev); strbuf_release(&diff_output); remove_path(stash_index_path.buf); return ret; diff --git a/diff-lib.c b/diff-lib.c index ca085a03efc..d6800274bd5 100644 --- a/diff-lib.c +++ b/diff-lib.c @@ -662,7 +662,7 @@ int index_differs_from(struct repository *r, diff_flags_or(&rev.diffopt.flags, flags); rev.diffopt.ita_invisible_in_index = ita_invisible_in_index; run_diff_index(&rev, 1); - object_array_clear(&rev.pending); + release_revisions(&rev); return (rev.diffopt.flags.has_changes != 0); } diff --git a/range-diff.c b/range-diff.c index b72eb9fdbee..39cc010c628 100644 --- a/range-diff.c +++ b/range-diff.c @@ -596,6 +596,6 @@ int is_range_diff_range(const char *arg) } free(copy); - object_array_clear(&revs.pending); + release_revisions(&revs); return negative > 0 && positive > 0; } diff --git a/revision.c b/revision.c index 4963ba7def8..5dd4b2e910c 100644 --- a/revision.c +++ b/revision.c @@ -2922,6 +2922,11 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s return left; } +void release_revisions(struct rev_info *revs) +{ + object_array_clear(&revs->pending); +} + static void add_child(struct rev_info *revs, struct commit *parent, struct commit *child) { struct commit_list *l = xcalloc(1, sizeof(*l)); diff --git a/revision.h b/revision.h index 5bc59c7bfe1..61c780fc4cd 100644 --- a/revision.h +++ b/revision.h @@ -377,6 +377,12 @@ void repo_init_revisions(struct repository *r, int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct setup_revision_opt *); +/** + * Free data allocated in a "struct rev_info" after it's been + * initialized with repo_init_revisions(). + */ +void release_revisions(struct rev_info *revs); + void parse_revision_opt(struct rev_info *revs, struct parse_opt_ctx_t *ctx, const struct option *options, const char * const usagestr[]); diff --git a/wt-status.c b/wt-status.c index d33f9272b72..922cf787f95 100644 --- a/wt-status.c +++ b/wt-status.c @@ -662,7 +662,7 @@ static void wt_status_collect_changes_index(struct wt_status *s) copy_pathspec(&rev.prune_data, &s->pathspec); run_diff_index(&rev, 1); - object_array_clear(&rev.pending); + release_revisions(&rev); clear_pathspec(&rev.prune_data); } @@ -2545,6 +2545,7 @@ int has_unstaged_changes(struct repository *r, int ignore_submodules) rev_info.diffopt.flags.quick = 1; diff_setup_done(&rev_info.diffopt); result = run_diff_files(&rev_info, 0); + release_revisions(&rev_info); return diff_result_code(&rev_info.diffopt, result); } @@ -2577,7 +2578,7 @@ int has_uncommitted_changes(struct repository *r, diff_setup_done(&rev_info.diffopt); result = run_diff_index(&rev_info, 1); - object_array_clear(&rev_info.pending); + release_revisions(&rev_info); return diff_result_code(&rev_info.diffopt, result); } From patchwork Wed Apr 13 20:01:36 2022 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: 12812600 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 65A62C433EF for ; Wed, 13 Apr 2022 20:02:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238617AbiDMUEx (ORCPT ); Wed, 13 Apr 2022 16:04:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40724 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238559AbiDMUEc (ORCPT ); Wed, 13 Apr 2022 16:04:32 -0400 Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3DC537B10B for ; Wed, 13 Apr 2022 13:02:09 -0700 (PDT) Received: by mail-wm1-x32e.google.com with SMTP id q20so1772473wmq.1 for ; Wed, 13 Apr 2022 13:02:09 -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=3bk8aBYDP4VTS6k3L85acd37blowp/4B/W+POriaOzc=; b=i5DA/EbEu4QY90bGXS5G4+JmugebV8Tk5T7AYizCU7lXgDKFxKOtDQ7YA8A6tJXh8U KJXBBzqllywO76I/2KS8cpVFDq+aITYcB7VU/Uxtcspz9Fg1S3VCUh/7wiLSDRin/3wP AyrCRkHuA9LYU8uD+5+YALEiRIfwApA5O7e+ZFOW4GGWDjxpQqoc5rP4Ov2lDOAHO8Rm vNfj87OW4qNxN9Wxd+jmMPL0x/mc5yHS5zc892aZXetwoz2NNwBTUtkp6TIMKedv6Acg 5y0j7KRokiIWz/nrPxWUfOHNFWsohFK71AqWqSqAxqTA2uYwIkRoJYfVDp1vW0GrehX6 32cg== 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=3bk8aBYDP4VTS6k3L85acd37blowp/4B/W+POriaOzc=; b=Bm77fb7hlEI2+eMX2+x0Bfb2TNID/aC5+qdnFGDsHPuupHz/NBzh5gA0Wv3B75FBc7 419/vJyNKZc5DrQn6lEsXdWRuOtIY27eKBNHHAkeY0B3XNz8pwd683zSflUolGtoWY9D Z5TNtCoitcKljnQ9UfQowid+24lw8xmrFIHCtODSNfYMcr5V33oKNZd5RcTkmTK83miu HzSmuWuUspKrgWEVkgDOXNdn+SX1vLbAGX2rAWhkay0A8sIknSbELREcJ24UXpaUub6+ uoOz3soGlW7m4Q4RmO+y/EorPwQB8qcZ+QPasCOTz6XeRmJvqVDlmvNhk3ahEq4XRumy xq0g== X-Gm-Message-State: AOAM531mGf2yjXMCexCEhP2coHC0QEteQU5bksAZ+uzn8nPIKoobYlDK vcqCD8RpF2y/2YxuleiLHkJPOEwyRBNooA== X-Google-Smtp-Source: ABdhPJz2FImLe2dxH4qYB2N37rBRNcxKymt+2GyOSnomvx6+8++xuecYiWQVFyBO0xSIPxhFXy+H7Q== X-Received: by 2002:a05:600c:3548:b0:38f:20d9:4f03 with SMTP id i8-20020a05600c354800b0038f20d94f03mr286096wmq.189.1649880127458; Wed, 13 Apr 2022 13:02:07 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:06 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 07/27] revisions API users: add straightforward release_revisions() Date: Wed, 13 Apr 2022 22:01:36 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Add a release_revisions() to various users of "struct rev_list" in those straightforward cases where we only need to add the release_revisions() call to the end of a block, and don't need to e.g. refactor anything to use a "goto cleanup" pattern. Signed-off-by: Ævar Arnfjörð Bjarmason --- add-interactive.c | 1 + bisect.c | 2 ++ builtin/add.c | 1 + builtin/am.c | 3 +++ builtin/bisect--helper.c | 2 ++ builtin/blame.c | 1 + builtin/checkout.c | 1 + builtin/commit.c | 1 + builtin/describe.c | 2 ++ builtin/fast-export.c | 1 + builtin/merge.c | 2 ++ builtin/pack-objects.c | 2 ++ builtin/prune.c | 1 + builtin/reflog.c | 1 + builtin/shortlog.c | 2 ++ builtin/submodule--helper.c | 1 + fmt-merge-msg.c | 1 + merge-ort.c | 1 + merge-recursive.c | 1 + midx.c | 1 + pack-bitmap-write.c | 1 + ref-filter.c | 1 + remote.c | 1 + sequencer.c | 3 +++ shallow.c | 1 + submodule.c | 2 ++ t/helper/test-revision-walking.c | 1 + wt-status.c | 1 + 28 files changed, 39 insertions(+) diff --git a/add-interactive.c b/add-interactive.c index 72472103017..54cdfc82017 100644 --- a/add-interactive.c +++ b/add-interactive.c @@ -570,6 +570,7 @@ static int get_modified_files(struct repository *r, if (ps) clear_pathspec(&rev.prune_data); + release_revisions(&rev); } hashmap_clear_and_free(&s.file_map, struct pathname_entry, ent); if (unmerged_count) diff --git a/bisect.c b/bisect.c index 9e6a2b7f201..cc6b8b6230d 100644 --- a/bisect.c +++ b/bisect.c @@ -884,6 +884,7 @@ static int check_ancestors(struct repository *r, int rev_nr, /* Clean up objects used, as they will be reused. */ clear_commit_marks_many(rev_nr, rev, ALL_REV_FLAGS); + release_revisions(&revs); return res; } @@ -964,6 +965,7 @@ static void show_diff_tree(struct repository *r, setup_revisions(ARRAY_SIZE(argv) - 1, argv, &opt, NULL); log_tree_commit(&opt, commit); + release_revisions(&opt); } /* diff --git a/builtin/add.c b/builtin/add.c index 3ffb86a4338..f507d2191cd 100644 --- a/builtin/add.c +++ b/builtin/add.c @@ -340,6 +340,7 @@ static int edit_patch(int argc, const char **argv, const char *prefix) unlink(file); free(file); + release_revisions(&rev); return 0; } diff --git a/builtin/am.c b/builtin/am.c index 0f4111bafa0..93bec62afa9 100644 --- a/builtin/am.c +++ b/builtin/am.c @@ -1397,6 +1397,7 @@ static void write_commit_patch(const struct am_state *state, struct commit *comm add_pending_object(&rev_info, &commit->object, ""); diff_setup_done(&rev_info.diffopt); log_tree_commit(&rev_info, commit); + release_revisions(&rev_info); } /** @@ -1429,6 +1430,7 @@ static void write_index_patch(const struct am_state *state) add_pending_object(&rev_info, &tree->object, ""); diff_setup_done(&rev_info.diffopt); run_diff_index(&rev_info, 1); + release_revisions(&rev_info); } /** @@ -1582,6 +1584,7 @@ static int fall_back_threeway(const struct am_state *state, const char *index_pa add_pending_oid(&rev_info, "HEAD", &our_tree, 0); diff_setup_done(&rev_info.diffopt); run_diff_index(&rev_info, 1); + release_revisions(&rev_info); } if (run_apply(state, index_path)) diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c index 8b2b259ff0d..e4d7b6779ae 100644 --- a/builtin/bisect--helper.c +++ b/builtin/bisect--helper.c @@ -555,6 +555,7 @@ static int bisect_skipped_commits(struct bisect_terms *terms) reset_revision_walk(); strbuf_release(&commit_name); + release_revisions(&revs); fclose(fp); return 0; } @@ -1041,6 +1042,7 @@ static enum bisect_error bisect_skip(struct bisect_terms *terms, const char **ar oid_to_hex(&commit->object.oid)); reset_revision_walk(); + release_revisions(&revs); } else { strvec_push(&argv_state, argv[i]); } diff --git a/builtin/blame.c b/builtin/blame.c index 885b381ab83..24bac822c56 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -1203,5 +1203,6 @@ int cmd_blame(int argc, const char **argv, const char *prefix) cleanup: cleanup_scoreboard(&sb); + release_revisions(&revs); return 0; } diff --git a/builtin/checkout.c b/builtin/checkout.c index 4d9e0bd3ac1..7ad4a7113c9 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -1082,6 +1082,7 @@ static void orphaned_commit_warning(struct commit *old_commit, struct commit *ne /* Clean up objects used, as they will be reused. */ repo_clear_commit_marks(the_repository, ALL_REV_FLAGS); + release_revisions(&revs); } static int switch_branches(const struct checkout_opts *opts, diff --git a/builtin/commit.c b/builtin/commit.c index 009a1de0a3d..c7eda9bbb72 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -1123,6 +1123,7 @@ static const char *find_author_by_nickname(const char *name) strbuf_release(&buf); format_commit_message(commit, "%aN <%aE>", &buf, &ctx); clear_mailmap(&mailmap); + release_revisions(&revs); return strbuf_detach(&buf, NULL); } die(_("--author '%s' is not 'Name ' and matches no existing author"), name); diff --git a/builtin/describe.c b/builtin/describe.c index 42159cd26bd..a76f1a1a7a7 100644 --- a/builtin/describe.c +++ b/builtin/describe.c @@ -517,6 +517,7 @@ static void describe_blob(struct object_id oid, struct strbuf *dst) traverse_commit_list(&revs, process_commit, process_object, &pcd); reset_revision_walk(); + release_revisions(&revs); } static void describe(const char *arg, int last_one) @@ -667,6 +668,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix) suffix = NULL; else suffix = dirty; + release_revisions(&revs); } describe("HEAD", 1); } else if (dirty) { diff --git a/builtin/fast-export.c b/builtin/fast-export.c index a7d72697fba..f34ae451ee3 100644 --- a/builtin/fast-export.c +++ b/builtin/fast-export.c @@ -1275,6 +1275,7 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix) printf("done\n"); refspec_clear(&refspecs); + release_revisions(&revs); return 0; } diff --git a/builtin/merge.c b/builtin/merge.c index f178f5a3ee1..d9784d4891c 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -443,6 +443,7 @@ static void squash_message(struct commit *commit, struct commit_list *remotehead } write_file_buf(git_path_squash_msg(the_repository), out.buf, out.len); strbuf_release(&out); + release_revisions(&rev); } static void finish(struct commit *head_commit, @@ -998,6 +999,7 @@ static int evaluate_result(void) */ cnt += count_unmerged_entries(); + release_revisions(&rev); return cnt; } diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index 014dcd4bc98..180fff03569 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -4177,11 +4177,13 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) read_object_list_from_stdin(); } else if (pfd.have_revs) { get_object_list(&pfd.revs, rp.nr, rp.v); + release_revisions(&pfd.revs); } else { struct rev_info revs; repo_init_revisions(the_repository, &revs, NULL); get_object_list(&revs, rp.nr, rp.v); + release_revisions(&revs); } cleanup_preferred_base(); if (include_tag && nr_result) diff --git a/builtin/prune.c b/builtin/prune.c index c2bcdc07db4..df376b2ed1e 100644 --- a/builtin/prune.c +++ b/builtin/prune.c @@ -196,5 +196,6 @@ int cmd_prune(int argc, const char **argv, const char *prefix) prune_shallow(show_only ? PRUNE_SHOW_ONLY : 0); } + release_revisions(&revs); return 0; } diff --git a/builtin/reflog.c b/builtin/reflog.c index c943c2aabe6..4dd297dce86 100644 --- a/builtin/reflog.c +++ b/builtin/reflog.c @@ -293,6 +293,7 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix) if (verbose) printf(_("Marking reachable objects...")); mark_reachable_objects(&revs, 0, 0, NULL); + release_revisions(&revs); if (verbose) putchar('\n'); } diff --git a/builtin/shortlog.c b/builtin/shortlog.c index fcde07c9367..35825f075e3 100644 --- a/builtin/shortlog.c +++ b/builtin/shortlog.c @@ -422,6 +422,8 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix) else get_from_rev(&rev, &log); + release_revisions(&rev); + shortlog_output(&log); if (log.file != stdout) fclose(log.file); diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index 2c87ef9364f..5d6b43fe3c0 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -1269,6 +1269,7 @@ static int compute_summary_module_list(struct object_id *head_oid, run_diff_files(&rev, 0); prepare_submodule_summary(info, &list); strvec_clear(&diff_args); + release_revisions(&rev); return 0; } diff --git a/fmt-merge-msg.c b/fmt-merge-msg.c index baca57d5b64..f48f44f9cd1 100644 --- a/fmt-merge-msg.c +++ b/fmt-merge-msg.c @@ -699,6 +699,7 @@ int fmt_merge_msg(struct strbuf *in, struct strbuf *out, shortlog(origins.items[i].string, origins.items[i].util, head, &rev, opts, out); + release_revisions(&rev); } strbuf_complete_line(out); diff --git a/merge-ort.c b/merge-ort.c index 8545354dafd..4c0d4eba19b 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -1594,6 +1594,7 @@ static int find_first_merges(struct repository *repo, } object_array_clear(&merges); + release_revisions(&revs); return result->nr; } diff --git a/merge-recursive.c b/merge-recursive.c index 32bbba5fbb1..acd13b2b069 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -1160,6 +1160,7 @@ static int find_first_merges(struct repository *repo, } object_array_clear(&merges); + release_revisions(&revs); return result->nr; } diff --git a/midx.c b/midx.c index 107365d2114..d5724df7d60 100644 --- a/midx.c +++ b/midx.c @@ -1061,6 +1061,7 @@ static struct commit **find_commits_for_midx_bitmap(uint32_t *indexed_commits_nr if (indexed_commits_nr_p) *indexed_commits_nr_p = cb.commits_nr; + release_revisions(&revs); return cb.commits; } diff --git a/pack-bitmap-write.c b/pack-bitmap-write.c index cf681547f2e..c43375bd344 100644 --- a/pack-bitmap-write.c +++ b/pack-bitmap-write.c @@ -326,6 +326,7 @@ static void bitmap_builder_init(struct bitmap_builder *bb, trace2_data_intmax("pack-bitmap-write", the_repository, "num_maximal_commits", num_maximal); + release_revisions(&revs); free_commit_list(reusable); } diff --git a/ref-filter.c b/ref-filter.c index 7838bd22b8d..a91688bbf17 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -2392,6 +2392,7 @@ static void reach_filter(struct ref_array *array, clear_commit_marks(merge_commit, ALL_REV_FLAGS); } + release_revisions(&revs); free(to_clear); } diff --git a/remote.c b/remote.c index 42a4e7106e1..fa3152a5d52 100644 --- a/remote.c +++ b/remote.c @@ -2172,6 +2172,7 @@ static int stat_branch_pair(const char *branch_name, const char *base, clear_commit_marks(theirs, ALL_REV_FLAGS); strvec_clear(&argv); + release_revisions(&revs); return 1; } diff --git a/sequencer.c b/sequencer.c index a1bb39383db..f9d7acd1065 100644 --- a/sequencer.c +++ b/sequencer.c @@ -1347,6 +1347,7 @@ void print_commit_summary(struct repository *r, log_tree_commit(&rev, commit); } + release_revisions(&rev); strbuf_release(&format); } @@ -3415,6 +3416,7 @@ static int make_patch(struct repository *r, unuse_commit_buffer(commit, commit_buffer); } strbuf_release(&buf); + release_revisions(&log_tree_opt); return res; } @@ -4525,6 +4527,7 @@ static int pick_commits(struct repository *r, &log_tree_opt.diffopt); log_tree_diff_flush(&log_tree_opt); } + release_revisions(&log_tree_opt); } flush_rewritten_pending(); if (!stat(rebase_path_rewritten_list(), &st) && diff --git a/shallow.c b/shallow.c index e158be58b05..797a593633f 100644 --- a/shallow.c +++ b/shallow.c @@ -262,6 +262,7 @@ struct commit_list *get_shallow_commits_by_rev_list(int ac, const char **av, if ((o->flags & both_flags) == both_flags) o->flags &= ~not_shallow_flag; } + release_revisions(&revs); return result; } diff --git a/submodule.c b/submodule.c index 9b715b4a5cb..7b5d7753930 100644 --- a/submodule.c +++ b/submodule.c @@ -923,9 +923,11 @@ static void collect_changed_submodules(struct repository *r, diff_rev.diffopt.format_callback_data = &data; diff_rev.dense_combined_merges = 1; diff_tree_combined_merge(commit, &diff_rev); + release_revisions(&diff_rev); } reset_revision_walk(); + release_revisions(&rev); } static void free_submodules_data(struct string_list *submodules) diff --git a/t/helper/test-revision-walking.c b/t/helper/test-revision-walking.c index 625b2dbf822..4a45d5bac2a 100644 --- a/t/helper/test-revision-walking.c +++ b/t/helper/test-revision-walking.c @@ -43,6 +43,7 @@ static int run_revision_walk(void) } reset_revision_walk(); + release_revisions(&rev); return got_revision; } diff --git a/wt-status.c b/wt-status.c index 922cf787f95..f9100621375 100644 --- a/wt-status.c +++ b/wt-status.c @@ -1152,6 +1152,7 @@ static void wt_longstatus_print_verbose(struct wt_status *s) rev.diffopt.b_prefix = "w/"; run_diff_files(&rev, 0); } + release_revisions(&rev); } static void wt_longstatus_print_tracking(struct wt_status *s) From patchwork Wed Apr 13 20:01:37 2022 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: 12812597 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 91298C433F5 for ; Wed, 13 Apr 2022 20:02:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238584AbiDMUEs (ORCPT ); Wed, 13 Apr 2022 16:04:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40726 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238551AbiDMUEc (ORCPT ); Wed, 13 Apr 2022 16:04:32 -0400 Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EB0D07B545 for ; Wed, 13 Apr 2022 13:02:09 -0700 (PDT) Received: by mail-wm1-x32c.google.com with SMTP id 123-20020a1c1981000000b0038b3616a71aso1845245wmz.4 for ; Wed, 13 Apr 2022 13:02:09 -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=Q3g+gATyUdX3Duarj5GVrfjqga0s7reF85RnYudbDvI=; b=am+CDRgB1D8xFFX9LA3vokKYuu05QiuZkA9fVO0T6FCysqUZIGc5QD6C81pyBjU1Ah FSz0YTbSOksRXxTJhRTEpeXJLwJyC6piZ4hpkRmMAvwSoFjET8epkPjOiQibgRj4Ov8j DdFEaTkUcRpvgbh52Kkrwlr1BXbevfAR6ZnGJqhTCWNl9FZjsEdHY30EMjWTYrWfY8uW kOH+YvL3CSFJ7UWsE1oTCkG3w1IFH3erlvtdvZTe8uhCrVNHJ/E+qPBBTnr67iZm8W9S 1d2hXf5Dic9Aq6fZev4BWntblFsY2i0siI2sUdTqlWfRXFf4RblXvEHwyVu85mzVCgpF nf7Q== 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=Q3g+gATyUdX3Duarj5GVrfjqga0s7reF85RnYudbDvI=; b=WsFN4MpCs2VgODOPH521/rjP234isSXMbV+ihEO+wgcqND1f7tISg1sb5c7mMUb8c2 h/r5kxiWitL1rYTDz1EgvsrtfiNSpZ/zKlecMwx6SmOvJw+3hHHPeqxYrv5Wu5SfsV0M K2ulhS9IfMMuKsFMFcC6By+QssQrnsGZkmfBa206hOrgejxAKZjqaxUdhpZ7lEZqQK5M BCCr8SB3JXbHYW9fZ11jbF8+wMDcXTXF8eqGh/GFyZepr+JRJY7m2JctgWSfzqTutGYq HL5KTWUgkS7xwQg57PGu29Jv+rJkvGoV6oI11spx3QQK3P0TvqN9pdsJBn7H0gOSDHo0 1nbw== X-Gm-Message-State: AOAM531Bn4IYXm9SX/OGOQJYqZ0frpbsvH+HYbdWnRn+WVGwM/Q/e4Dl AR25CVX1mykLt0lL7y5aN+NoxLrUsPIwQQ== X-Google-Smtp-Source: ABdhPJxsPjsezcyDuak4vlNGlPJBJj01YKftJ/PUqUoyPySmKmJ7ZdmfVyJlIE/JqWRSYSf81N8+Sg== X-Received: by 2002:a05:600c:a03:b0:37b:daff:6146 with SMTP id z3-20020a05600c0a0300b0037bdaff6146mr292651wmp.85.1649880128305; Wed, 13 Apr 2022 13:02:08 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:07 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 08/27] revision.[ch]: document and move code declared around "init" Date: Wed, 13 Apr 2022 22:01:37 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org A subsequent commit will add "REV_INFO_INIT" macro adjacent to repo_init_revisions(), unfortunately between the "struct rev_info" itself and that function we've added various miscellaneous code between the two over the years. Let's move that code either lower in revision.h, giving it API docs while we're at it, or in cases where it wasn't public API at all move it into revision.c No lines of code are changed here, only moved around. The only changes are the addition of new API comments. The "tree_difference" variable could also be declared like this, which I think would be a lot clearer, but let's leave that for now to keep this a move-only change: static enum { REV_TREE_SAME, REV_TREE_NEW, /* Only new files */ REV_TREE_OLD, /* Only files removed */ REV_TREE_DIFFERENT, /* Mixed changes */ } tree_difference = REV_TREE_SAME; Signed-off-by: Ævar Arnfjörð Bjarmason --- revision.c | 4 ++++ revision.h | 50 ++++++++++++++++++++++++-------------------------- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/revision.c b/revision.c index 5dd4b2e910c..472fff1e0a7 100644 --- a/revision.c +++ b/revision.c @@ -606,6 +606,10 @@ static struct commit *one_relevant_parent(const struct rev_info *revs, * * 2. We saw anything except REV_TREE_NEW. */ +#define REV_TREE_SAME 0 +#define REV_TREE_NEW 1 /* Only new files */ +#define REV_TREE_OLD 2 /* Only files removed */ +#define REV_TREE_DIFFERENT 3 /* Mixed changes */ static int tree_difference = REV_TREE_SAME; static void file_add_remove(struct diff_options *options, diff --git a/revision.h b/revision.h index 61c780fc4cd..b9070e43428 100644 --- a/revision.h +++ b/revision.h @@ -329,32 +329,6 @@ struct rev_info { struct tmp_objdir *remerge_objdir; }; -int ref_excluded(struct string_list *, const char *path); -void clear_ref_exclusion(struct string_list **); -void add_ref_exclusion(struct string_list **, const char *exclude); - - -#define REV_TREE_SAME 0 -#define REV_TREE_NEW 1 /* Only new files */ -#define REV_TREE_OLD 2 /* Only files removed */ -#define REV_TREE_DIFFERENT 3 /* Mixed changes */ - -/* revision.c */ -typedef void (*show_early_output_fn_t)(struct rev_info *, struct commit_list *); -extern volatile show_early_output_fn_t show_early_output; - -struct setup_revision_opt { - const char *def; - void (*tweak)(struct rev_info *, struct setup_revision_opt *); - unsigned int assume_dashdash:1, - allow_exclude_promisor_objects:1; - unsigned revarg_opt; -}; - -#ifndef NO_THE_REPOSITORY_COMPATIBILITY_MACROS -#define init_revisions(revs, prefix) repo_init_revisions(the_repository, revs, prefix) -#endif - /** * Initialize a rev_info structure with default values. The third parameter may * be NULL or can be prefix path, and then the `.prefix` variable will be set @@ -366,6 +340,9 @@ struct setup_revision_opt { void repo_init_revisions(struct repository *r, struct rev_info *revs, const char *prefix); +#ifndef NO_THE_REPOSITORY_COMPATIBILITY_MACROS +#define init_revisions(revs, prefix) repo_init_revisions(the_repository, revs, prefix) +#endif /** * Parse revision information, filling in the `rev_info` structure, and @@ -374,6 +351,13 @@ void repo_init_revisions(struct repository *r, * head of the argument list. The last parameter is used in case no * parameter given by the first two arguments. */ +struct setup_revision_opt { + const char *def; + void (*tweak)(struct rev_info *, struct setup_revision_opt *); + unsigned int assume_dashdash:1, + allow_exclude_promisor_objects:1; + unsigned revarg_opt; +}; int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct setup_revision_opt *); @@ -423,6 +407,14 @@ void mark_trees_uninteresting_sparse(struct repository *r, struct oidset *trees) void show_object_with_name(FILE *, struct object *, const char *); +/** + * Helpers to check if a "struct string_list" item matches with + * wildmatch(). + */ +int ref_excluded(struct string_list *, const char *path); +void clear_ref_exclusion(struct string_list **); +void add_ref_exclusion(struct string_list **, const char *exclude); + /** * This function can be used if you want to add commit objects as revision * information. You can use the `UNINTERESTING` object flag to indicate if @@ -478,4 +470,10 @@ int rewrite_parents(struct rev_info *revs, */ struct commit_list *get_saved_parents(struct rev_info *revs, const struct commit *commit); +/** + * Global for the (undocumented) "--early-output" flag for "git log". + */ +typedef void (*show_early_output_fn_t)(struct rev_info *, struct commit_list *); +extern volatile show_early_output_fn_t show_early_output; + #endif From patchwork Wed Apr 13 20:01:38 2022 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: 12812599 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CAE65C433EF for ; Wed, 13 Apr 2022 20:02:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237152AbiDMUEu (ORCPT ); Wed, 13 Apr 2022 16:04:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40744 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238571AbiDMUEd (ORCPT ); Wed, 13 Apr 2022 16:04:33 -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 0C1517B555 for ; Wed, 13 Apr 2022 13:02:11 -0700 (PDT) Received: by mail-wr1-x431.google.com with SMTP id p18so3346435wru.5 for ; Wed, 13 Apr 2022 13:02:10 -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=G5zn1P5xNSELRY2uCUjZnOEDoIK3Lpq9Z8bka99vUKI=; b=iQAV9UcWQFJMLKl4q/mr98pdzRhtakmbZF3xQoyvJA0i3anf+YYQKzw5DEh+LIT2Is btScPgObXqbkybgJqamQoQqEZDEEU0CeEMMJ17QCbGGFmfOkoxk0gXJlh4WmSl+qIRtA SmNSa9NKOcEQTTtHh/8CBHvQbIJot3hlMcBbprx/wl4ycsfXUi/FZbLl0tN1mzmZpVCI BOxl4Inxs45QRbPlB/Wq5ppLDbN/QH+nRinD+KJUN+mB9ZohtYD00HS6zzbbZodpmTjS dT5pVDEr/FCyXZCRx0Nms1k+3nKuPEQMWe8R4m0iK9fhxC8W6UnJ55Ck5zAOhWd65TKt OPfA== 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=G5zn1P5xNSELRY2uCUjZnOEDoIK3Lpq9Z8bka99vUKI=; b=A/FjhUVsZzu5GAwQjheZvlYAYrd1L2f1vBAbpteL5z9eZZA32ZL3q2KnLOIRbYErvr XmzcX1hJtyWGmpe+zMCcQYd9cpgfLCwTDdw0881cbeFbVa24mXWtPoWNDN/2nZCMGfy4 eS4A9e/cTItkNqQZYJXNYU1aN0gruUM9Szur9gFiSObTuuQieV6iTqAokMGhxfIMZkkD 64ti9dQ2rcMt4woQ/icR/7UQDK6542liVng+5HNV4cML9JfeHJMLovpBTSjkCJPWc5C0 +TXRtbqdv9nJFo4+BUULnrx9qSHaoAmLfLBYl+iCQ/vX2RE7l+9oFKlbDmvAIWTO2dFs HV2w== X-Gm-Message-State: AOAM530yUBgxxdmncBgGcw3hvCsDAv6eDoHW3nmgH29nqh3vpeZ5vbnZ 0DJBtTBAZPNSScuB3ko2jMK+SQQFCVEZqg== X-Google-Smtp-Source: ABdhPJwOLH7BhFw20LGOgOtF8cFVzKDVx3e4tpLF/zyLjnbo12TJskWipzEP0cMG0QqZydHn7X7oHQ== X-Received: by 2002:a5d:6d0b:0:b0:207:81ec:93ff with SMTP id e11-20020a5d6d0b000000b0020781ec93ffmr339424wrq.239.1649880129234; Wed, 13 Apr 2022 13:02:09 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:08 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 09/27] revisions API users: use release_revisions() needing REV_INFO_INIT Date: Wed, 13 Apr 2022 22:01:38 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Use release_revisions() to various users of "struct rev_list" which need to have their "struct rev_info" zero-initialized before we can start using it. For the bundle.c code see the early exit case added in 3bbbe467f29 (bundle verify: error out if called without an object database, 2019-05-27). For the relevant bisect.c code see 45b6370812c (bisect: libify `check_good_are_ancestors_of_bad` and its dependents, 2020-02-17). For the submodule.c code see the "goto" on "(!left || !right || !sub)" added in 8e6df65015f (submodule: refactor show_submodule_summary with helper function, 2016-08-31). Signed-off-by: Ævar Arnfjörð Bjarmason --- bisect.c | 18 ++++++++++++------ builtin/submodule--helper.c | 3 ++- bundle.c | 12 ++++++++---- revision.h | 21 ++++++++++++++++++++- submodule.c | 3 ++- 5 files changed, 44 insertions(+), 13 deletions(-) diff --git a/bisect.c b/bisect.c index cc6b8b6230d..b63669cc9d7 100644 --- a/bisect.c +++ b/bisect.c @@ -1010,7 +1010,7 @@ void read_bisect_terms(const char **read_bad, const char **read_good) */ enum bisect_error bisect_next_all(struct repository *r, const char *prefix) { - struct rev_info revs; + struct rev_info revs = REV_INFO_INIT; struct commit_list *tried; int reaches = 0, all = 0, nr, steps; enum bisect_error res = BISECT_OK; @@ -1035,7 +1035,7 @@ enum bisect_error bisect_next_all(struct repository *r, const char *prefix) res = check_good_are_ancestors_of_bad(r, prefix, no_checkout); if (res) - return res; + goto cleanup; bisect_rev_setup(r, &revs, prefix, "%s", "^%s", 1); @@ -1060,14 +1060,16 @@ enum bisect_error bisect_next_all(struct repository *r, const char *prefix) term_good, term_bad); - return BISECT_FAILED; + res = BISECT_FAILED; + goto cleanup; } if (!all) { fprintf(stderr, _("No testable commit found.\n" "Maybe you started with bad path arguments?\n")); - return BISECT_NO_TESTABLE_COMMIT; + res = BISECT_NO_TESTABLE_COMMIT; + goto cleanup; } bisect_rev = &revs.commits->item->object.oid; @@ -1087,7 +1089,8 @@ enum bisect_error bisect_next_all(struct repository *r, const char *prefix) * for negative return values for early returns up * until the cmd_bisect__helper() caller. */ - return BISECT_INTERNAL_SUCCESS_1ST_BAD_FOUND; + res = BISECT_INTERNAL_SUCCESS_1ST_BAD_FOUND; + goto cleanup; } nr = all - reaches - 1; @@ -1106,7 +1109,10 @@ enum bisect_error bisect_next_all(struct repository *r, const char *prefix) /* Clean up objects used, as they will be reused. */ repo_clear_commit_marks(r, ALL_REV_FLAGS); - return bisect_checkout(bisect_rev, no_checkout); + res = bisect_checkout(bisect_rev, no_checkout); +cleanup: + release_revisions(&revs); + return res; } static inline int log2i(int n) diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index 5d6b43fe3c0..9a65985b418 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -766,7 +766,7 @@ static void status_submodule(const char *path, const struct object_id *ce_oid, { char *displaypath; struct strvec diff_files_args = STRVEC_INIT; - struct rev_info rev; + struct rev_info rev = REV_INFO_INIT; int diff_files_result; struct strbuf buf = STRBUF_INIT; const char *git_dir; @@ -853,6 +853,7 @@ static void status_submodule(const char *path, const struct object_id *ce_oid, cleanup: strvec_clear(&diff_files_args); free(displaypath); + release_revisions(&rev); } static void status_submodule_cb(const struct cache_entry *list_item, diff --git a/bundle.c b/bundle.c index d50cfb5aa7e..6a870a6edb7 100644 --- a/bundle.c +++ b/bundle.c @@ -196,14 +196,16 @@ int verify_bundle(struct repository *r, * to be verbose about the errors */ struct string_list *p = &header->prerequisites; - struct rev_info revs; + struct rev_info revs = REV_INFO_INIT; const char *argv[] = {NULL, "--all", NULL}; struct commit *commit; int i, ret = 0, req_nr; const char *message = _("Repository lacks these prerequisite commits:"); - if (!r || !r->objects || !r->objects->odb) - return error(_("need a repository to verify a bundle")); + if (!r || !r->objects || !r->objects->odb) { + ret = error(_("need a repository to verify a bundle")); + goto cleanup; + } repo_init_revisions(r, &revs, NULL); for (i = 0; i < p->nr; i++) { @@ -221,7 +223,7 @@ int verify_bundle(struct repository *r, error("%s %s", oid_to_hex(oid), name); } if (revs.pending.nr != p->nr) - return ret; + goto cleanup; req_nr = revs.pending.nr; setup_revisions(2, argv, &revs, NULL); @@ -284,6 +286,8 @@ int verify_bundle(struct repository *r, printf_ln("The bundle uses this filter: %s", list_objects_filter_spec(&header->filter)); } +cleanup: + release_revisions(&revs); return ret; } diff --git a/revision.h b/revision.h index b9070e43428..2621eb6d65a 100644 --- a/revision.h +++ b/revision.h @@ -329,6 +329,25 @@ struct rev_info { struct tmp_objdir *remerge_objdir; }; +/** + * Initialize the "struct rev_info" structure with a macro. + * + * This will not fully initialize a "struct rev_info", the + * repo_init_revisions() function needs to be called before + * setup_revisions() and any revision walking takes place. + * + * Use REV_INFO_INIT to make the "struct rev_info" safe for passing to + * release_revisions() when it's inconvenient (e.g. due to a "goto + * cleanup" pattern) to arrange for repo_init_revisions() to be called + * before release_revisions() is called. + * + * Initializing with this REV_INFO_INIT is redundant to invoking + * repo_init_revisions(). If repo_init_revisions() is guaranteed to be + * called before release_revisions() the "struct rev_info" can be left + * uninitialized. + */ +#define REV_INFO_INIT { 0 } + /** * Initialize a rev_info structure with default values. The third parameter may * be NULL or can be prefix path, and then the `.prefix` variable will be set @@ -363,7 +382,7 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, /** * Free data allocated in a "struct rev_info" after it's been - * initialized with repo_init_revisions(). + * initialized with repo_init_revisions() or REV_INFO_INIT. */ void release_revisions(struct rev_info *revs); diff --git a/submodule.c b/submodule.c index 7b5d7753930..7923e951e1c 100644 --- a/submodule.c +++ b/submodule.c @@ -619,7 +619,7 @@ void show_submodule_diff_summary(struct diff_options *o, const char *path, struct object_id *one, struct object_id *two, unsigned dirty_submodule) { - struct rev_info rev; + struct rev_info rev = REV_INFO_INIT; struct commit *left = NULL, *right = NULL; struct commit_list *merge_bases = NULL; struct repository *sub; @@ -646,6 +646,7 @@ void show_submodule_diff_summary(struct diff_options *o, const char *path, out: free_commit_list(merge_bases); + release_revisions(&rev); clear_commit_marks(left, ~0); clear_commit_marks(right, ~0); if (sub) { From patchwork Wed Apr 13 20:01:39 2022 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: 12812598 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8DBF2C433FE for ; Wed, 13 Apr 2022 20:02:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238586AbiDMUEt (ORCPT ); Wed, 13 Apr 2022 16:04:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40788 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238573AbiDMUEe (ORCPT ); Wed, 13 Apr 2022 16:04:34 -0400 Received: from mail-wr1-x429.google.com (mail-wr1-x429.google.com [IPv6:2a00:1450:4864:20::429]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0DB017B55C for ; Wed, 13 Apr 2022 13:02:12 -0700 (PDT) Received: by mail-wr1-x429.google.com with SMTP id t1so4174540wra.4 for ; Wed, 13 Apr 2022 13:02:11 -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=VpbpPQKFIE0wFb0og0ybwM3qs+6CJgaQ9z76sf4JktY=; b=YxC+UC0dec0i8Z8Zfu9hm2q0vOPKOu1Mm4bPyXZxLQyFYoMyFWscHVbkKKdQrzjpZE fEjyL1eLVjbD/ZHxfaUK7lGlcRJFMUmdaA+9PaQ+gb1ZJTfK/wq/iPt4HP1uaWNOivCd aoRUvOIQgC1uYG0PEhdi93bSYKLhNGpwy17pJwmu4cyf4jnrA7yZwEC3a6lvJO/pntcV N0Gs4Tb7j5Ff8ChLPnOi4JJMt2WY0uaCDzjeMuPmZm6IuJw8hwuYryZyEpkPlnwKLxAc C/M0NnjM2ZdCczlSzr+lTF3WlE0ioDlGCwJGM9EpU2qMh2ekP514upNYD2pIh8kkUpoe HclA== 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=VpbpPQKFIE0wFb0og0ybwM3qs+6CJgaQ9z76sf4JktY=; b=2+0c1Du1ci0eKNizJOgUqHBPHg7QrHVs51/wospHJTHPOS0BO/Cui+pcs2ctEIHh55 X4GB/+2TuBeliPIUmDf5jgNYNmZukAZm1ySBcLoOBY+Ugd7HKpbqzjbCWieULQsP2SB+ CAet2VW2NvmfIW6552yQVQm2lbrnOTmeA4bvr9geO1IXySu7AeZELbTsazcOhhx0eqAb IeHxk18CL7SCbPCTc5m9MflZEDndNNVh2m1XThWw71/Vb1kezfMsjahlS/iaq6YfcBOe VxmM6BkNgNwF4zkGy12oC+5quJILSsQLGFIsejuaNRIfs8hyo5UfJh3/kOem5+DRJDOJ 5cZQ== X-Gm-Message-State: AOAM531ELnYFY2GKKDH4Tu1lMtc+aVt5EQ42zLJweGGHr97IT0aXhOqr ZeKFTdWx5jhizzmNO3NiEqDpVzaLcwqmUg== X-Google-Smtp-Source: ABdhPJwRld55Sc1mLyzaVbfRffqrm6SSccf+yPvaKMeoGPX8LLZhDbF/nKMzzJAZDXuQNLGOkC5tzw== X-Received: by 2002:adf:fb01:0:b0:205:c3e1:7980 with SMTP id c1-20020adffb01000000b00205c3e17980mr327496wrr.639.1649880130265; Wed, 13 Apr 2022 13:02:10 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:09 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 10/27] stash: always have the owner of "stash_info" free it Date: Wed, 13 Apr 2022 22:01:39 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Change the initialization of the "revision" member of "struct stash_info" to be initialized vi a macro, and more importantly that that initializing function be tasked to free it, usually via a "goto cleanup" pattern. Despite the "revision" name (and the topic of the series containing this commit) the "stash info" has nothing to do with the "struct rev_info". I'm making this change because in the subsequent commit when we do want to free the "struct rev_info" via a "goto cleanup" pattern we'd otherwise free() uninitialized memory in some cases, as we only strbuf_init() the string in get_stash_info(). So while it's not the smallest possible change, let's convert all users of this pattern in the file while we're at it. A good follow-up to this change would be to change all the "ret = -1; goto done;" in this file to instead use a "goto cleanup", and initialize "int ret = -1" at the start of the relevant functions. That would allow us to drop a lot of needless brace verbosity on two-line "if" statements, but let's leave that alone for now. To ensure that there's a 1=1 mapping between owners of the "struct stash_info" and free_stash_info() change the assert_stash_ref() function to be a trivial get_stash_info_assert() wrapper. The caller will call free_stash_info(), and by returning -1 we'll eventually (via !!ret) exit with status 1 anyway. Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/stash.c | 107 ++++++++++++++++++++++++++---------------------- 1 file changed, 59 insertions(+), 48 deletions(-) diff --git a/builtin/stash.c b/builtin/stash.c index 74fa810cf8c..ba030238939 100644 --- a/builtin/stash.c +++ b/builtin/stash.c @@ -116,6 +116,10 @@ struct stash_info { int has_u; }; +#define STASH_INFO_INIT { \ + .revision = STRBUF_INIT, \ +} + static void free_stash_info(struct stash_info *info) { strbuf_release(&info->revision); @@ -157,10 +161,8 @@ static int get_stash_info(struct stash_info *info, int argc, const char **argv) if (argc == 1) commit = argv[0]; - strbuf_init(&info->revision, 0); if (!commit) { if (!ref_exists(ref_stash)) { - free_stash_info(info); fprintf_ln(stderr, _("No stash entries found.")); return -1; } @@ -174,11 +176,8 @@ static int get_stash_info(struct stash_info *info, int argc, const char **argv) revision = info->revision.buf; - if (get_oid(revision, &info->w_commit)) { - error(_("%s is not a valid reference"), revision); - free_stash_info(info); - return -1; - } + if (get_oid(revision, &info->w_commit)) + return error(_("%s is not a valid reference"), revision); assert_stash_like(info, revision); @@ -197,7 +196,7 @@ static int get_stash_info(struct stash_info *info, int argc, const char **argv) info->is_stash_ref = !strcmp(expanded_ref, ref_stash); break; default: /* Invalid or ambiguous */ - free_stash_info(info); + break; } free(expanded_ref); @@ -598,10 +597,10 @@ static int do_apply_stash(const char *prefix, struct stash_info *info, static int apply_stash(int argc, const char **argv, const char *prefix) { - int ret; + int ret = -1; int quiet = 0; int index = 0; - struct stash_info info; + struct stash_info info = STASH_INFO_INIT; struct option options[] = { OPT__QUIET(&quiet, N_("be quiet, only report errors")), OPT_BOOL(0, "index", &index, @@ -613,9 +612,10 @@ static int apply_stash(int argc, const char **argv, const char *prefix) git_stash_apply_usage, 0); if (get_stash_info(&info, argc, argv)) - return -1; + goto cleanup; ret = do_apply_stash(prefix, &info, index, quiet); +cleanup: free_stash_info(&info); return ret; } @@ -651,20 +651,25 @@ static int do_drop_stash(struct stash_info *info, int quiet) return 0; } -static void assert_stash_ref(struct stash_info *info) +static int get_stash_info_assert(struct stash_info *info, int argc, + const char **argv) { - if (!info->is_stash_ref) { - error(_("'%s' is not a stash reference"), info->revision.buf); - free_stash_info(info); - exit(1); - } + int ret = get_stash_info(info, argc, argv); + + if (ret < 0) + return ret; + + if (!info->is_stash_ref) + return error(_("'%s' is not a stash reference"), info->revision.buf); + + return 0; } static int drop_stash(int argc, const char **argv, const char *prefix) { - int ret; + int ret = -1; int quiet = 0; - struct stash_info info; + struct stash_info info = STASH_INFO_INIT; struct option options[] = { OPT__QUIET(&quiet, N_("be quiet, only report errors")), OPT_END() @@ -673,22 +678,21 @@ static int drop_stash(int argc, const char **argv, const char *prefix) argc = parse_options(argc, argv, prefix, options, git_stash_drop_usage, 0); - if (get_stash_info(&info, argc, argv)) - return -1; - - assert_stash_ref(&info); + if (get_stash_info_assert(&info, argc, argv)) + goto cleanup; ret = do_drop_stash(&info, quiet); +cleanup: free_stash_info(&info); return ret; } static int pop_stash(int argc, const char **argv, const char *prefix) { - int ret; + int ret = -1; int index = 0; int quiet = 0; - struct stash_info info; + struct stash_info info = STASH_INFO_INIT; struct option options[] = { OPT__QUIET(&quiet, N_("be quiet, only report errors")), OPT_BOOL(0, "index", &index, @@ -699,25 +703,25 @@ static int pop_stash(int argc, const char **argv, const char *prefix) argc = parse_options(argc, argv, prefix, options, git_stash_pop_usage, 0); - if (get_stash_info(&info, argc, argv)) - return -1; + if (get_stash_info_assert(&info, argc, argv)) + goto cleanup; - assert_stash_ref(&info); if ((ret = do_apply_stash(prefix, &info, index, quiet))) printf_ln(_("The stash entry is kept in case " "you need it again.")); else ret = do_drop_stash(&info, quiet); +cleanup: free_stash_info(&info); return ret; } static int branch_stash(int argc, const char **argv, const char *prefix) { - int ret; + int ret = -1; const char *branch = NULL; - struct stash_info info; + struct stash_info info = STASH_INFO_INIT; struct child_process cp = CHILD_PROCESS_INIT; struct option options[] = { OPT_END() @@ -734,7 +738,7 @@ static int branch_stash(int argc, const char **argv, const char *prefix) branch = argv[0]; if (get_stash_info(&info, argc - 1, argv + 1)) - return -1; + goto cleanup; cp.git_cmd = 1; strvec_pushl(&cp.args, "checkout", "-b", NULL); @@ -746,8 +750,8 @@ static int branch_stash(int argc, const char **argv, const char *prefix) if (!ret && info.is_stash_ref) ret = do_drop_stash(&info, 0); +cleanup: free_stash_info(&info); - return ret; } @@ -825,8 +829,8 @@ static void diff_include_untracked(const struct stash_info *info, struct diff_op static int show_stash(int argc, const char **argv, const char *prefix) { int i; - int ret = 0; - struct stash_info info; + int ret = -1; + struct stash_info info = STASH_INFO_INIT; struct rev_info rev; struct strvec stash_args = STRVEC_INIT; struct strvec revision_args = STRVEC_INIT; @@ -844,6 +848,7 @@ static int show_stash(int argc, const char **argv, const char *prefix) UNTRACKED_ONLY, PARSE_OPT_NONEG), OPT_END() }; + int do_usage = 0; init_diff_ui_defaults(); git_config(git_diff_ui_config, NULL); @@ -861,10 +866,8 @@ static int show_stash(int argc, const char **argv, const char *prefix) strvec_push(&revision_args, argv[i]); } - ret = get_stash_info(&info, stash_args.nr, stash_args.v); - strvec_clear(&stash_args); - if (ret) - return -1; + if (get_stash_info(&info, stash_args.nr, stash_args.v)) + goto cleanup; /* * The config settings are applied only if there are not passed @@ -878,16 +881,14 @@ static int show_stash(int argc, const char **argv, const char *prefix) rev.diffopt.output_format |= DIFF_FORMAT_PATCH; if (!show_stat && !show_patch) { - free_stash_info(&info); - return 0; + ret = 0; + goto cleanup; } } argc = setup_revisions(revision_args.nr, revision_args.v, &rev, NULL); - if (argc > 1) { - free_stash_info(&info); - usage_with_options(git_stash_show_usage, options); - } + if (argc > 1) + goto usage; if (!rev.diffopt.output_format) { rev.diffopt.output_format = DIFF_FORMAT_PATCH; diff_setup_done(&rev.diffopt); @@ -912,8 +913,16 @@ static int show_stash(int argc, const char **argv, const char *prefix) } log_tree_diff_flush(&rev); + ret = diff_result_code(&rev.diffopt, 0); +cleanup: + strvec_clear(&stash_args); free_stash_info(&info); - return diff_result_code(&rev.diffopt, 0); + if (do_usage) + usage_with_options(git_stash_show_usage, options); + return ret; +usage: + do_usage = 1; + goto cleanup; } static int do_store_stash(const struct object_id *w_commit, const char *stash_msg, @@ -1409,9 +1418,9 @@ static int do_create_stash(const struct pathspec *ps, struct strbuf *stash_msg_b static int create_stash(int argc, const char **argv, const char *prefix) { - int ret = 0; + int ret; struct strbuf stash_msg_buf = STRBUF_INIT; - struct stash_info info; + struct stash_info info = STASH_INFO_INIT; struct pathspec ps; /* Starting with argv[1], since argv[0] is "create" */ @@ -1426,6 +1435,7 @@ static int create_stash(int argc, const char **argv, const char *prefix) if (!ret) printf_ln("%s", oid_to_hex(&info.w_commit)); + free_stash_info(&info); strbuf_release(&stash_msg_buf); return ret; } @@ -1434,7 +1444,7 @@ static int do_push_stash(const struct pathspec *ps, const char *stash_msg, int q int keep_index, int patch_mode, int include_untracked, int only_staged) { int ret = 0; - struct stash_info info; + struct stash_info info = STASH_INFO_INIT; struct strbuf patch = STRBUF_INIT; struct strbuf stash_msg_buf = STRBUF_INIT; struct strbuf untracked_files = STRBUF_INIT; @@ -1633,6 +1643,7 @@ static int do_push_stash(const struct pathspec *ps, const char *stash_msg, int q } done: + free_stash_info(&info); strbuf_release(&stash_msg_buf); return ret; } From patchwork Wed Apr 13 20:01:40 2022 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: 12812602 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7E621C433FE for ; Wed, 13 Apr 2022 20:02:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238622AbiDMUE6 (ORCPT ); Wed, 13 Apr 2022 16:04:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41040 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238581AbiDMUEm (ORCPT ); Wed, 13 Apr 2022 16:04:42 -0400 Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0A9A97C16A for ; Wed, 13 Apr 2022 13:02:12 -0700 (PDT) Received: by mail-wr1-x436.google.com with SMTP id i20so4129591wrb.13 for ; Wed, 13 Apr 2022 13:02:12 -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=WeYrDPtVm60vwEmAozcenOwrJ3p6DSHM1Ok4wp2Re4s=; b=EbM7GKjbaYB/ZDSIkBvQjOtX4kYSDUMhGokZ0kn+9pS+VH/hw1d/lMfFGvrCTCnej2 sj6QJHR4cShJsB38QQasYjbp0Cn4kh/FNjpXTwclGboPHlLhO6FnHTZUENgSNn8j3S23 SXMiBxNMcnDH7XO63Uq95zkLSwe0ND3ObKEAW+PhCru7TjQLzvXxbi+oOTEchFspSiQ8 rCej9bRr1TTEHmnOifodc0c1j71ctaV4Z/7XJbgWlPulxUPgJ1+8Vi28K9bOJKLqfTdR KHMSs58ZfYL4xdyOJXBtLqpmZndWhsA+e00Q0frP2V/KgM8iNZdgQ1X8bBwCdLScF9q/ qKZg== 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=WeYrDPtVm60vwEmAozcenOwrJ3p6DSHM1Ok4wp2Re4s=; b=e4q2a96Rj3ip4rr6prMI30QxrTnta3hvFbhAZm24hYqfgH7a1SMXa7vh4eEDfNrQX5 02PzYur5WuO2uL40tbrfukKPjkpKDwFv3ity+z1Rpr0foAgJXGCmbY642QdfXcNJbm3d PZUwlT7J38oXqLvvXixBgyz1D0gep7X4FgCTDdRBgJy5X2QqvEkIAXAnmNztEVjXbkBQ 3ujrB1kNboiF7AmHyPBZpcTUzs4b9uuRan8GwHEsE3/wnlXvabOhBwt1ydKKcCKDDsbq 3SbfBLYESwMImTWhCaXhhFRNxvkGKF1maWD4SXrCU1tBJX1QzjjNPw0TPaUk6oHeFmnf 0rvg== X-Gm-Message-State: AOAM530aVeaJYihb73Yvdf9LetcsKE0NpCXDBRIZObRRGKlwZfxnZnOO wOB8jjTWxsObL1nMhDeFp6VA3PvPhJX+OA== X-Google-Smtp-Source: ABdhPJz+97X5OLeCaBeWGDhUB6UFM5iZz1iuWNpNDJSysVFDJpGJlhXOE3MOuwveRT9hIsu7GL3emg== X-Received: by 2002:a5d:6301:0:b0:205:cb42:74a5 with SMTP id i1-20020a5d6301000000b00205cb4274a5mr341095wru.385.1649880131258; Wed, 13 Apr 2022 13:02:11 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:10 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 11/27] revisions API users: add "goto cleanup" for release_revisions() Date: Wed, 13 Apr 2022 22:01:40 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Add a release_revisions() to various users of "struct rev_info" which requires a minor refactoring to a "goto cleanup" pattern to use that function. Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/diff-files.c | 8 ++++++-- builtin/rev-list.c | 19 ++++++++++++------- builtin/stash.c | 1 + builtin/submodule--helper.c | 10 +++++++--- sequencer.c | 23 ++++++++++++++++------- t/helper/test-fast-rebase.c | 18 +++++++++++++----- 6 files changed, 55 insertions(+), 24 deletions(-) diff --git a/builtin/diff-files.c b/builtin/diff-files.c index 70103c40952..2bfaf9ba7ae 100644 --- a/builtin/diff-files.c +++ b/builtin/diff-files.c @@ -77,8 +77,12 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix) if (read_cache_preload(&rev.diffopt.pathspec) < 0) { perror("read_cache_preload"); - return -1; + result = -1; + goto cleanup; } +cleanup: result = run_diff_files(&rev, options); - return diff_result_code(&rev.diffopt, result); + result = diff_result_code(&rev.diffopt, result); + release_revisions(&rev); + return result; } diff --git a/builtin/rev-list.c b/builtin/rev-list.c index 07c0ad11d8d..30fd8e83eaf 100644 --- a/builtin/rev-list.c +++ b/builtin/rev-list.c @@ -500,6 +500,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) int use_bitmap_index = 0; int filter_provided_objects = 0; const char *show_progress = NULL; + int ret = 0; if (argc == 2 && !strcmp(argv[1], "-h")) usage(rev_list_usage); @@ -583,7 +584,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) } if (!strcmp(arg, "--test-bitmap")) { test_bitmap_walk(&revs); - return 0; + goto cleanup; } if (skip_prefix(arg, "--progress=", &arg)) { show_progress = arg; @@ -672,11 +673,11 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) if (use_bitmap_index) { if (!try_bitmap_count(&revs, filter_provided_objects)) - return 0; + goto cleanup; if (!try_bitmap_disk_usage(&revs, filter_provided_objects)) - return 0; + goto cleanup; if (!try_bitmap_traversal(&revs, filter_provided_objects)) - return 0; + goto cleanup; } if (prepare_revision_walk(&revs)) @@ -696,8 +697,10 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) find_bisection(&revs.commits, &reaches, &all, bisect_flags); - if (bisect_show_vars) - return show_bisect_vars(&info, reaches, all); + if (bisect_show_vars) { + ret = show_bisect_vars(&info, reaches, all); + goto cleanup; + } } if (filter_provided_objects) { @@ -752,5 +755,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) if (show_disk_usage) printf("%"PRIuMAX"\n", (uintmax_t)total_disk_usage); - return 0; +cleanup: + release_revisions(&revs); + return ret; } diff --git a/builtin/stash.c b/builtin/stash.c index ba030238939..fce4393d123 100644 --- a/builtin/stash.c +++ b/builtin/stash.c @@ -917,6 +917,7 @@ static int show_stash(int argc, const char **argv, const char *prefix) cleanup: strvec_clear(&stash_args); free_stash_info(&info); + release_revisions(&rev); if (do_usage) usage_with_options(git_stash_show_usage, options); return ret; diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index 9a65985b418..f83c75c7768 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -1232,6 +1232,7 @@ static int compute_summary_module_list(struct object_id *head_oid, struct strvec diff_args = STRVEC_INIT; struct rev_info rev; struct module_cb_list list = MODULE_CB_LIST_INIT; + int ret = 0; strvec_push(&diff_args, get_diff_cmd(diff_cmd)); if (info->cached) @@ -1257,11 +1258,13 @@ static int compute_summary_module_list(struct object_id *head_oid, setup_work_tree(); if (read_cache_preload(&rev.diffopt.pathspec) < 0) { perror("read_cache_preload"); - return -1; + ret = -1; + goto cleanup; } } else if (read_cache() < 0) { perror("read_cache"); - return -1; + ret = -1; + goto cleanup; } if (diff_cmd == DIFF_INDEX) @@ -1269,9 +1272,10 @@ static int compute_summary_module_list(struct object_id *head_oid, else run_diff_files(&rev, 0); prepare_submodule_summary(info, &list); +cleanup: strvec_clear(&diff_args); release_revisions(&rev); - return 0; + return ret; } static int module_summary(int argc, const char **argv, const char *prefix) diff --git a/sequencer.c b/sequencer.c index f9d7acd1065..41ae5e25278 100644 --- a/sequencer.c +++ b/sequencer.c @@ -5354,6 +5354,7 @@ int sequencer_make_script(struct repository *r, struct strbuf *out, int argc, int rebase_merges = flags & TODO_LIST_REBASE_MERGES; int reapply_cherry_picks = flags & TODO_LIST_REAPPLY_CHERRY_PICKS; int skipped_commit = 0; + int ret = 0; repo_init_revisions(r, &revs, NULL); revs.verbose_header = 1; @@ -5377,14 +5378,20 @@ int sequencer_make_script(struct repository *r, struct strbuf *out, int argc, pp.fmt = revs.commit_format; pp.output_encoding = get_log_output_encoding(); - if (setup_revisions(argc, argv, &revs, NULL) > 1) - return error(_("make_script: unhandled options")); + if (setup_revisions(argc, argv, &revs, NULL) > 1) { + ret = error(_("make_script: unhandled options")); + goto cleanup; + } - if (prepare_revision_walk(&revs) < 0) - return error(_("make_script: error preparing revisions")); + if (prepare_revision_walk(&revs) < 0) { + ret = error(_("make_script: error preparing revisions")); + goto cleanup; + } - if (rebase_merges) - return make_script_with_merges(&pp, &revs, out, flags); + if (rebase_merges) { + ret = make_script_with_merges(&pp, &revs, out, flags); + goto cleanup; + } while ((commit = get_revision(&revs))) { int is_empty = is_original_commit_empty(commit); @@ -5408,7 +5415,9 @@ int sequencer_make_script(struct repository *r, struct strbuf *out, int argc, if (skipped_commit) advise_if_enabled(ADVICE_SKIPPED_CHERRY_PICKS, _("use --reapply-cherry-picks to include skipped commits")); - return 0; +cleanup: + release_revisions(&revs); + return ret; } /* diff --git a/t/helper/test-fast-rebase.c b/t/helper/test-fast-rebase.c index 993b90eaedd..4e5553e2024 100644 --- a/t/helper/test-fast-rebase.c +++ b/t/helper/test-fast-rebase.c @@ -99,6 +99,7 @@ int cmd__fast_rebase(int argc, const char **argv) struct merge_result result; struct strbuf reflog_msg = STRBUF_INIT; struct strbuf branch_name = STRBUF_INIT; + int ret = 0; /* * test-tool stuff doesn't set up the git directory by default; need to @@ -137,13 +138,17 @@ int cmd__fast_rebase(int argc, const char **argv) revs.topo_order = 1; strvec_pushl(&rev_walk_args, "", argv[4], "--not", argv[3], NULL); - if (setup_revisions(rev_walk_args.nr, rev_walk_args.v, &revs, NULL) > 1) - return error(_("unhandled options")); + if (setup_revisions(rev_walk_args.nr, rev_walk_args.v, &revs, NULL) > 1) { + ret = error(_("unhandled options")); + goto cleanup; + } strvec_clear(&rev_walk_args); - if (prepare_revision_walk(&revs) < 0) - return error(_("error preparing revisions")); + if (prepare_revision_walk(&revs) < 0) { + ret = error(_("error preparing revisions")); + goto cleanup; + } init_merge_options(&merge_opt, the_repository); memset(&result, 0, sizeof(result)); @@ -220,7 +225,10 @@ int cmd__fast_rebase(int argc, const char **argv) COMMIT_LOCK | SKIP_IF_UNCHANGED)) die(_("unable to write %s"), get_index_file()); + ret = (result.clean == 0); +cleanup: strbuf_release(&reflog_msg); strbuf_release(&branch_name); - return (result.clean == 0); + release_revisions(&revs); + return ret; } From patchwork Wed Apr 13 20:01:41 2022 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: 12812603 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 21F09C433F5 for ; Wed, 13 Apr 2022 20:02:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238637AbiDMUE7 (ORCPT ); Wed, 13 Apr 2022 16:04:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41038 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238582AbiDMUEm (ORCPT ); Wed, 13 Apr 2022 16:04:42 -0400 Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D9A457C783 for ; Wed, 13 Apr 2022 13:02:13 -0700 (PDT) Received: by mail-wr1-x430.google.com with SMTP id t1so4174637wra.4 for ; Wed, 13 Apr 2022 13:02:13 -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=WPlhHzMJswBQ3YhKnMBPzIwACQU9Gl3Vlv5RvywqdHQ=; b=QjJAgBQMdUJK93g+K5ThHWPWcVfcHuZQaudzjsmJhvr60K8PDxrJGChfZ64jVQ7l0T Z/yPjhKFjyscb4SeIrwRsQVWWeawfJFUTojqJU4mRtRRMDoe8rL6A6EJHmuCDAvtc1Qd cqrj7QvTLu8dj485RDrgNPswM0Wc0WgrBpgdDX/dIXmGYJv2iYkOs4NDf8WjeIlTK5Up TTxdaYccLTH7OlstKDvAyfkAEF0MfpBvjg9tEYecOxInAPJc6x1rAks32MetIBft7Xcl t7vi4peaSl6JQKdox6cxQaoZBoO+/EiDSbrbMZZGdjRpnEK0iV+XodLXfad9M5fPyprj LELQ== 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=WPlhHzMJswBQ3YhKnMBPzIwACQU9Gl3Vlv5RvywqdHQ=; b=CvfKMIcqtektbuSv0bn7O8PeHsglYlq7/xQ/WxR1rxk43s2g/isASpVo83FZivfiK7 Wn3baQuAGg0qP1492Kg/MCAUqQkve4QuzGm+DjcaBFYf0RGmBIEGy+TWh0ABNQaLWF44 +qTmEnpGUJFiXR0BHt8G+ceoI4gegANXLJ5wlWVXE+Zy8HmfpSQDUfHrvmfbxd3Te6eD mOjyyMgAbk2ZKacTetbhCdiA5lZ8N3Wvql8yZUhZ8hqdYIUVmSYZdhPVcjn7TiG9TYCR Ekzw1SSoodHtggU90X7pnHll+9EzK73T3NHIfKlCQbeJd5+FwVmL7m/Odqjul4glcDhQ WC+Q== X-Gm-Message-State: AOAM5313urMWG3dnSrClIfTY0xdXvCUwuw25DP2lUXT3X0hSN5tW7FW1 4Bgv8sJoM1Rw7TuRggr1Q+r/TvbZi0mR7A== X-Google-Smtp-Source: ABdhPJzskdlSiK7xaGGiSDmlNmGUCuLZNCZ5uiBVFoArxGGJohQYdUvMPP8WTwmYGy+2eG7BocdhYg== X-Received: by 2002:a05:6000:11c7:b0:207:b3db:8b80 with SMTP id i7-20020a05600011c700b00207b3db8b80mr376068wrx.110.1649880132208; Wed, 13 Apr 2022 13:02:12 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:11 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 12/27] revisions API users: use release_revisions() in http-push.c Date: Wed, 13 Apr 2022 22:01:41 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org In the case of cmd_main() in http-push.c we need to move the deceleration of the "struct rev-list" into the loop over the "remote_refs" when adding a release_revisions(). We'd previously set up the "revs" for each remote, but would potentially leak memory on each one. Signed-off-by: Ævar Arnfjörð Bjarmason --- http-push.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/http-push.c b/http-push.c index f0c044dcf76..01e7c2ac5c8 100644 --- a/http-push.c +++ b/http-push.c @@ -1689,7 +1689,6 @@ int cmd_main(int argc, const char **argv) struct refspec rs = REFSPEC_INIT_PUSH; struct remote_lock *ref_lock = NULL; struct remote_lock *info_ref_lock = NULL; - struct rev_info revs; int delete_branch = 0; int force_delete = 0; int objects_to_send; @@ -1825,6 +1824,7 @@ int cmd_main(int argc, const char **argv) new_refs = 0; for (ref = remote_refs; ref; ref = ref->next) { + struct rev_info revs; struct strvec commit_argv = STRVEC_INIT; if (!ref->peer_ref) @@ -1941,6 +1941,7 @@ int cmd_main(int argc, const char **argv) unlock_remote(ref_lock); check_locks(); strvec_clear(&commit_argv); + release_revisions(&revs); } /* Update remote server info if appropriate */ From patchwork Wed Apr 13 20:01:42 2022 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: 12812601 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E740EC433F5 for ; Wed, 13 Apr 2022 20:02:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238619AbiDMUE4 (ORCPT ); Wed, 13 Apr 2022 16:04:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41050 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238591AbiDMUEn (ORCPT ); Wed, 13 Apr 2022 16:04:43 -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 D02267C7B4 for ; Wed, 13 Apr 2022 13:02:14 -0700 (PDT) Received: by mail-wr1-x431.google.com with SMTP id w4so4135026wrg.12 for ; Wed, 13 Apr 2022 13:02:14 -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=X0Hdt/VUCbZMIhpGIBXcKwXTpeGqIF7XfgJlmA+qs2o=; b=g0jDRmfQ5nkQ3TQrnPw1zIYukRcT4qBXsV17+3an0jAb2O1eTR1jqtrW7czT2GVXRO mgcGWP1kDUf3mOt81+0G2P6fIARlKSF5Xps24yMYeXFChsnyNa1QikbkSHY0xXy5C4Ct whhEaTTn3ZcMZTLYtYcNo2VDU499iluxg3yWpwFn/AGHp4QswP3QhVWPmIdy4LaOacNM VTVRJQ3nFCQiMjH47EXrLPAffKMcsle+Deik56Bcl/epvP9kTCCyMgkayC//Y/6bW8T3 xk8MkinXvaKAfsvtnt5uW0z/+r+bK63mFT3CcqCCzYZWmbyGLBiXurVWMJOz/hcrx1FI TcMw== 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=X0Hdt/VUCbZMIhpGIBXcKwXTpeGqIF7XfgJlmA+qs2o=; b=HQX+iSPS3gbsu+BSh7zYuroZFDPxlKqO8WsDqOiilb620G9+rSPXCbHQv7AlRYAgBE R3dJmW+Gl/NgjNDl8xkrjahOVs5U3CvMaMLvYp7EAydRXVc2LsHggBElprtq8TzrjE0P 3YWO4IC18O9EB8n+NUWl9dWV8bLD/MFW2ZjxDR2y6ZDvixCvKvUORC2WB1zp0zGeK5Dy 2NqrabG7gyfftzI6/g2JDPy8SZCxFb+P5P1QpJ9ispSMVxVqYP1i+BwVudTtoVYetowD aUDz9M/Hw0csYOoVM8GUkt0mm4+4uemUd1if4YwV+4JqFLF4jrtm+f9gkn9i8v5aIrfH pwvw== X-Gm-Message-State: AOAM5319Pcwqk5NkilRuWy+7/1UeLIa35DHtkTnG3xhZnXRK0DuROlQf vXiQr11N7wPalL5azDhSBX0sX8vIdo32fg== X-Google-Smtp-Source: ABdhPJyIQCRpetb4Zywy0c3x3WABJuZ2y/zsUt4gdr5+fxiX/vN2HOIf6TKEHAPIIkhYYvMimNUfnQ== X-Received: by 2002:a5d:59a3:0:b0:207:b776:7924 with SMTP id p3-20020a5d59a3000000b00207b7767924mr331186wrr.363.1649880133146; Wed, 13 Apr 2022 13:02:13 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:12 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 13/27] revisions API users: use release_revisions() in builtin/log.c Date: Wed, 13 Apr 2022 22:01:42 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org In preparation for having the "log" family of functions make wider use of release_revisions() let's have them call it just before exiting. This changes the "log", "whatchanged", "show", "format-patch", etc. commands, all of which live in this file. The release_revisions() API still only frees the "pending" member, but will learn to release more members of "struct rev_info" in subsequent commits. In the case of "format-patch" revert the addition of UNLEAK() in dee839a2633 (format-patch: mark rev_info with UNLEAK, 2021-12-16), which will cause several tests that previously passed under "TEST_PASSES_SANITIZE_LEAK=true" to start failing. In subsequent commits we'll now be able to use those tests to check whether that part of the API is really leaking memory, and will fix all of those memory leaks. Removing the UNLEAK() allows us to make incremental progress in that direction. See [1] for further details about this approach. Note that the release_revisions() will not be sufficient to deal with the code in cmd_show() added in 5d7eeee2ac6 (git-show: grok blobs, trees and tags, too, 2006-12-14) which clobbers the "pending" array in the case of "OBJ_COMMIT". That will need to be dealt with by some future follow-up work. 1. https://lore.kernel.org/git/220218.861r00ib86.gmgdl@evledraar.gmail.com/ Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/log.c | 20 ++++++++++++-------- t/t4126-apply-empty.sh | 2 -- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/builtin/log.c b/builtin/log.c index 6f9928fabfe..c40ebe1c3f4 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -295,6 +295,12 @@ static void cmd_log_init(int argc, const char **argv, const char *prefix, cmd_log_init_finish(argc, argv, prefix, rev, opt); } +static int cmd_log_deinit(int ret, struct rev_info *rev) +{ + release_revisions(rev); + return ret; +} + /* * This gives a rough estimate for how many commits we * will print out in the list. @@ -558,7 +564,7 @@ int cmd_whatchanged(int argc, const char **argv, const char *prefix) cmd_log_init(argc, argv, prefix, &rev, &opt); if (!rev.diffopt.output_format) rev.diffopt.output_format = DIFF_FORMAT_RAW; - return cmd_log_walk(&rev); + return cmd_log_deinit(cmd_log_walk(&rev), &rev); } static void show_tagger(const char *buf, struct rev_info *rev) @@ -677,7 +683,7 @@ int cmd_show(int argc, const char **argv, const char *prefix) cmd_log_init(argc, argv, prefix, &rev, &opt); if (!rev.no_walk) - return cmd_log_walk(&rev); + return cmd_log_deinit(cmd_log_walk(&rev), &rev); count = rev.pending.nr; objects = rev.pending.objects; @@ -732,8 +738,7 @@ int cmd_show(int argc, const char **argv, const char *prefix) ret = error(_("unknown type: %d"), o->type); } } - free(objects); - return ret; + return cmd_log_deinit(ret, &rev); } /* @@ -761,7 +766,7 @@ int cmd_log_reflog(int argc, const char **argv, const char *prefix) rev.always_show_header = 1; cmd_log_init_finish(argc, argv, prefix, &rev, &opt); - return cmd_log_walk(&rev); + return cmd_log_deinit(cmd_log_walk(&rev), &rev); } static void log_setup_revisions_tweak(struct rev_info *rev, @@ -792,7 +797,7 @@ int cmd_log(int argc, const char **argv, const char *prefix) opt.revarg_opt = REVARG_COMMITTISH; opt.tweak = log_setup_revisions_tweak; cmd_log_init(argc, argv, prefix, &rev, &opt); - return cmd_log_walk(&rev); + return cmd_log_deinit(cmd_log_walk(&rev), &rev); } /* format-patch */ @@ -2289,8 +2294,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) if (rev.ref_message_ids) string_list_clear(rev.ref_message_ids, 0); free(rev.ref_message_ids); - UNLEAK(rev); - return 0; + return cmd_log_deinit(0, &rev); } static int add_pending_commit(const char *arg, struct rev_info *revs, int flags) diff --git a/t/t4126-apply-empty.sh b/t/t4126-apply-empty.sh index 33860d38290..66a7ba8ab8f 100755 --- a/t/t4126-apply-empty.sh +++ b/t/t4126-apply-empty.sh @@ -2,8 +2,6 @@ test_description='apply empty' - -TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' From patchwork Wed Apr 13 20:01:43 2022 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: 12812606 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0FD23C433EF for ; Wed, 13 Apr 2022 20:02:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234684AbiDMUFG (ORCPT ); Wed, 13 Apr 2022 16:05:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41058 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238593AbiDMUEn (ORCPT ); Wed, 13 Apr 2022 16:04:43 -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 B6A897CB32 for ; Wed, 13 Apr 2022 13:02:15 -0700 (PDT) Received: by mail-wr1-x432.google.com with SMTP id m14so4172167wrb.6 for ; Wed, 13 Apr 2022 13:02:15 -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=vmK8+zC6kJ13KICrtg4WkxHtH3v9Bphmr7dWkSKJcao=; b=OIFIEF4egTVqjRs0vo75q0PDezCzf0fIjOBbGIUa/LnWvVyZSZrI9XsSref9C6+Q4c qU8/isVDFajLAO3pm1I3UQ3HLFQQtAPgO1zsf7nQ23yjeaoGuZzn7hsW6O9CdEOuwJkH 7s5TKly8Yq7X/oTCNIyahZaAmbqLj04nCB40x6vLEVyl+Ab6L0jMXUmREr+J9oui69xE 3MR6eHlKGVRvbBjuP22jbIUO6lAWtQ6CJMzmVAZVGGc53YWFB2mA9SvY78D0uAmM/WYc 1olxzslb/3pBTtQequwgHZBfTGRx0VnhB1WlVaR5Egx8lRwfLSkBPONMtJELCyFOPCwH F6YA== 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=vmK8+zC6kJ13KICrtg4WkxHtH3v9Bphmr7dWkSKJcao=; b=h3gZx3xiVTBTD0/WHHOorQUhUt1CLTlxs+cNRh/1A/+f2JX0p5VdeLX7F2UDAZ+YAQ nJtzGX6alvwqRpPceDgJyZYCdkRl5MVMR18frg5eyRL9b7prWBk6d+hWm4ZDGioHhfBz YRXqm8JQkIooKa/xWb+bDplq6R4nBVlV4kVDgebD4gEOq1MdHlYGx4hDDapdX6GxIvtc w2heUX0mPjHi7lhb9WZcJkMYal0qadc/ENv3icUgx8eApvhyYFSSpUw+Ps+WIlKfIo0d Z2j+jDGw4Hlzrc0dJzYNtsDEmaPItOEM61WrBA8C0/IhJFlK4RfzwW4APmMi559POAIf Te7g== X-Gm-Message-State: AOAM532Y3GGwV6EdSo+LYgMgpmRp2GP2acu5ZECexrCwj+SLTuzIqWgs BGdX9JMrJNF3EzS42EB8iduuIfB4BiUCbQ== X-Google-Smtp-Source: ABdhPJyZp1Lf0oojlWFKMKpDh+XYjWg+LCVfTEYlNjf3CHbuaPrGQ78afHzX9JQTJWDinu0iE4sttA== X-Received: by 2002:a05:6000:8c:b0:207:a4dc:dfab with SMTP id m12-20020a056000008c00b00207a4dcdfabmr335434wrx.441.1649880134089; Wed, 13 Apr 2022 13:02:14 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:13 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 14/27] revisions API users: use release_revisions() with UNLEAK() Date: Wed, 13 Apr 2022 22:01:43 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Use a release_revisions() with those "struct rev_list" users which already "UNLEAK" the struct. It may seem odd to simultaneously attempt to free() memory, but also to explicitly ignore whether we have memory leaks in the same. As explained in preceding commits this is being done to use the built-in commands as a guinea pig for whether the release_revisions() function works as expected, we'd like to test e.g. whether we segfault as we change it. In subsequent commits we'll then remove these UNLEAK() as the function is made to free the memory that caused us to add them in the first place. Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/diff-index.c | 4 +++- builtin/diff.c | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/builtin/diff-index.c b/builtin/diff-index.c index 5fd23ab5b6c..3a83183c312 100644 --- a/builtin/diff-index.c +++ b/builtin/diff-index.c @@ -71,5 +71,7 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix) } result = run_diff_index(&rev, option); UNLEAK(rev); - return diff_result_code(&rev.diffopt, result); + result = diff_result_code(&rev.diffopt, result); + release_revisions(&rev); + return result; } diff --git a/builtin/diff.c b/builtin/diff.c index bb7fafca618..dd48336da56 100644 --- a/builtin/diff.c +++ b/builtin/diff.c @@ -595,6 +595,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix) if (1 < rev.diffopt.skip_stat_unmatch) refresh_index_quietly(); UNLEAK(rev); + release_revisions(&rev); UNLEAK(ent); UNLEAK(blob); return result; From patchwork Wed Apr 13 20:01:44 2022 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: 12812604 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0F495C433EF for ; Wed, 13 Apr 2022 20:02:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238666AbiDMUFD (ORCPT ); Wed, 13 Apr 2022 16:05:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41064 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238595AbiDMUEn (ORCPT ); Wed, 13 Apr 2022 16:04:43 -0400 Received: from mail-wr1-x42e.google.com (mail-wr1-x42e.google.com [IPv6:2a00:1450:4864:20::42e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A6B7B7CDC3 for ; Wed, 13 Apr 2022 13:02:16 -0700 (PDT) Received: by mail-wr1-x42e.google.com with SMTP id p18so3346746wru.5 for ; Wed, 13 Apr 2022 13:02:16 -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=bpr5J1HNLv4JIm4Du6h8y4lS+ZjlRfTkWVS5x6pU54Q=; b=dGots9v5n/ScirCDJfwOMy3nUoOl5eOQVToW+CHGw6qtv05es3ukRyFYiBAhsYe3B5 uhYeHDvrBJrnjRVo6H4eSCSduIJXU74VZkBNkNNvaYG7b9SHQuVGIDZYLgPwtRK7gwZZ M8yH5nJej8n1Z5gXvNMT6e5+kmGYu0uWzNEiVx4U+Svss/SrlKauMThBbCz4BhQKDT/m 8jwrK4aFzSEySd55hdNpuI6yZZ8vYS+khCVO0n/m9VOavg/x8slB8bnqTm4LqsCA13Ks iaxOKzD2CifbS3GErMGZu0Z4sT7extIecxB9HwP8WbMrHIpcTPCPtdfv9tzLWI6h8ex+ 2j5A== 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=bpr5J1HNLv4JIm4Du6h8y4lS+ZjlRfTkWVS5x6pU54Q=; b=lP6EG0sv2DPYk01D60Vb62YY6p6nQTYfmlYXMPCOyxfIVrvniIpt1VJrLQ/nNg5Rza w2MHcC44XLboCwtd8xHflDc0roFZyH347b99a6NXKMQFuPZq+quTbLnfEul+OinhVqnw jiM+5rEkbEc0K2gCkTPVEzceIK6e4cuaHOqkPKe2xfrpne6w3r7kWJjjaW8LrIZGDJ/r www1Ogpm1/0QzvFi01rEF15tScRCHXzpiK5bBO82NNVLnG8QJ36lVfY68jNu4jVOfWC9 /ql/WirgvX7VTALAvaP/zzy9VldQQp71hTmSXVRuoxtD+MgPv8aXC42WHNermce3NmIX zvLA== X-Gm-Message-State: AOAM5315/Ov7zaxCS1S8JJvKOa5P+RxxpL0fUPvJe/S+BdiqiNBr01Xm p4jyLwP/0/2KGsVuIckLNmcLb3fklqPJBQ== X-Google-Smtp-Source: ABdhPJxw8vzQc35a74g38+tJu1IEUcSKNf78wboahTqdHXTN+GSKFaj53Ge/NeKIcqrzxXSr2Mprdw== X-Received: by 2002:a5d:64eb:0:b0:207:a762:b36b with SMTP id g11-20020a5d64eb000000b00207a762b36bmr375749wri.470.1649880135009; Wed, 13 Apr 2022 13:02:15 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:14 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 15/27] revisions API users: use release_revisions() for "prune_data" users Date: Wed, 13 Apr 2022 22:01:44 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Use release_revisions() for users of "struct rev_list" that reach into the "struct rev_info" and clear the "prune_data" already. In a subsequent commit we'll teach release_revisions() to clear this itself, but in the meantime let's invoke release_revisions() here to clear anything else we may have missed, and for reasons of having consistent boilerplate. Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/add.c | 1 + diff-lib.c | 1 + wt-status.c | 1 + 3 files changed, 3 insertions(+) diff --git a/builtin/add.c b/builtin/add.c index f507d2191cd..115a26ea633 100644 --- a/builtin/add.c +++ b/builtin/add.c @@ -143,6 +143,7 @@ int add_files_to_cache(const char *prefix, rev.max_count = 0; /* do not compare unmerged paths with stage #2 */ run_diff_files(&rev, DIFF_RACY_IS_MODIFIED); clear_pathspec(&rev.prune_data); + release_revisions(&rev); return !!data.add_errors; } diff --git a/diff-lib.c b/diff-lib.c index d6800274bd5..0f16281253f 100644 --- a/diff-lib.c +++ b/diff-lib.c @@ -642,6 +642,7 @@ int do_diff_cache(const struct object_id *tree_oid, struct diff_options *opt) if (diff_cache(&revs, tree_oid, NULL, 1)) exit(128); clear_pathspec(&revs.prune_data); + release_revisions(&revs); return 0; } diff --git a/wt-status.c b/wt-status.c index f9100621375..a14fad1e03a 100644 --- a/wt-status.c +++ b/wt-status.c @@ -617,6 +617,7 @@ static void wt_status_collect_changes_worktree(struct wt_status *s) copy_pathspec(&rev.prune_data, &s->pathspec); run_diff_files(&rev, 0); clear_pathspec(&rev.prune_data); + release_revisions(&rev); } static void wt_status_collect_changes_index(struct wt_status *s) From patchwork Wed Apr 13 20:01:45 2022 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: 12812605 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A645DC433FE for ; Wed, 13 Apr 2022 20:02:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238605AbiDMUFE (ORCPT ); Wed, 13 Apr 2022 16:05:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41008 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238594AbiDMUEn (ORCPT ); Wed, 13 Apr 2022 16:04:43 -0400 Received: from mail-wm1-x334.google.com (mail-wm1-x334.google.com [IPv6:2a00:1450:4864:20::334]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 779FE7C781 for ; Wed, 13 Apr 2022 13:02:17 -0700 (PDT) Received: by mail-wm1-x334.google.com with SMTP id o20-20020a05600c511400b0038ebbbb2ad8so1872041wms.0 for ; Wed, 13 Apr 2022 13:02:17 -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=ofn1s6W+yCV/oGzzBdrB7F3s0em6EkUI9rj17Gu8G8M=; b=pe94PzM+7UtOJyvz4gG3X5z6EpLpm2FIzztFPd5epnlq/3cQRY/fkK4UEp0oZScmrE v611vL+wtr6KY9gFbtT+1t8leR1T4mFAOvLHnzrVFvc19BL0o8AvexM9PyxzPhIv3RQD w+E/mSHxnqJEfzp/jABQYcxI+GLf9pXniPzSNJ+o6I66wJ1L7WVDddcG55S2XckleRO5 lrmRPm35V9j9OAnM1fxoeed2fjQqZRyXE+ZaISfCyeq+r/JR0nxQEFpUM0+6xEID3+44 0iSr3YRK4VTVkJtMrNHnVB0KfzKiSMIZUJKPuogfVwdbl6Hw5P0gZirm2UJAuzmC366F XDeA== 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=ofn1s6W+yCV/oGzzBdrB7F3s0em6EkUI9rj17Gu8G8M=; b=DsCVi3Ea5jBYtZqFJvcwVTtn2wZbVTeEtK+jPJ5HbP7hLMUEs1fVTUE4VodeiDZp2b bR42521j21ysBlfiqSfoDsCKRNhh6CGy5v9LqzrMSlqqn5DHniSNR49gVqXWcrAwxKOS YnY2uNRC+pabe0ZnUFSbSMWPcgcwNtxkWmdunaNEBInG737XR3uOJxzRDhkE43iuAWm6 leUFX1IQ+Z/8xR9kiuBXxhaSijxn9PmdfGNdmPbTW0AQF3jwElJlelXnyaEg0rIzZ80E h2a9tyoCLzSgC2bjfL/X6ISOUpjvQRFUceeWVidGw8HsOnff9WdYM9WBeTYGBKBX0DKM Ur8w== X-Gm-Message-State: AOAM53143QeAwVS6VpJBPBYnENUEc7UAvP6yzqdg3ZVeUgHGWnYq5bee bfbS7UZG2zf27+sJ+wdMIH1wotCR4k1Tkg== X-Google-Smtp-Source: ABdhPJxWnCvNMlHRsfq2L5909oB+3HKIBXQfaN0F/o3wlejUOx7c3W4EUaKDihkbFpuzGVT/1PrtBQ== X-Received: by 2002:a05:600c:4f90:b0:38e:d3bb:ca with SMTP id n16-20020a05600c4f9000b0038ed3bb00camr331906wmq.2.1649880135862; Wed, 13 Apr 2022 13:02:15 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:15 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 16/27] revisions API: have release_revisions() release "commits" Date: Wed, 13 Apr 2022 22:01:45 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Extend the the release_revisions() function so that it frees the "commits" in the "struct rev_info". We don't expect to use this "struct rev_info" again, so there's no reason to NULL out revs->commits, as e.g. simplify_merges() and create_boundary_commit_list() do. Signed-off-by: Ævar Arnfjörð Bjarmason --- revision.c | 1 + 1 file changed, 1 insertion(+) diff --git a/revision.c b/revision.c index 472fff1e0a7..553f7de8250 100644 --- a/revision.c +++ b/revision.c @@ -2928,6 +2928,7 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s void release_revisions(struct rev_info *revs) { + free_commit_list(revs->commits); object_array_clear(&revs->pending); } From patchwork Wed Apr 13 20:01:46 2022 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: 12812607 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 12062C433EF for ; Wed, 13 Apr 2022 20:02:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238636AbiDMUFI (ORCPT ); Wed, 13 Apr 2022 16:05:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41040 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238603AbiDMUEn (ORCPT ); Wed, 13 Apr 2022 16:04:43 -0400 Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9119B7CDFB for ; Wed, 13 Apr 2022 13:02:18 -0700 (PDT) Received: by mail-wr1-x433.google.com with SMTP id k22so4186761wrd.2 for ; Wed, 13 Apr 2022 13:02:18 -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=sfRO+DuZL+BBo+lR/CwLkJGNGG9FG6rknMRL4G9MQAE=; b=ChKJAkKRKmo1YSFLJfq6p8HB5Hs+7lrmgi7uc0fgjXRR0pX59yomWT6DQ3tYduA8xV B+SFUnoT1bFcwKbs4jQGFSsJkNd//TfLsg8eu3m8xPah13mSkDPS8vTB7sSsDej531M0 Y+BQwsqOCYBtXdolJ63/QLEaTsxy+5JEO3S7cH/ELB3IvUH6Z/C5tZtbTZWQBEALdtCT LV1hzU6K2gFP+8Gjd3d7qcKQuH542z+nrDmNw19OYNJTMcsZoRApig+Ed6kQQb/ZkNkv qf2qZ1U/GyhTLAKNAz53nO+LqEawxjdKaFmO8/OLDmXA8vx9ceRfxjn3Ab7Xu2Z6iEZ3 YP1g== 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=sfRO+DuZL+BBo+lR/CwLkJGNGG9FG6rknMRL4G9MQAE=; b=ukFKbgsonbouqQT7G5GigWdMg56ds48cBAttvcL2iw+JVVT47/yjo3A9/2CsABsI3e RlRZy/pqn5az593vPa0AULdPNnqnZsXSeYmTq9dYg3VMCFh0GIS0PfFJhoyZY0WpZ+wf HInAra1cFLuhh2r0Cvnkrr4M/dbpUdz65GSGFCtZyq05BacMJoa8Lv04T6rAgWBM8rbF R/xpo+MG2JGCzEeoFrxKNczk2IUWPDMP978NHoTzLi1XOECcpA9G8slqN0Jd2nG4DVv3 1UwF6u2ycR8s6J9zaR9OkMnCItvN4SYBPy3cXSod2CUhqm4i3FKzTdXVkFXBEqQylnU0 IoYw== X-Gm-Message-State: AOAM532OewwlG/MLJgoSJ2dksZepq1qjolsP5YRg20Wy0FrSN8LRzS92 nT3+N5cRfxUCncVAoBMkQKej5MAngbIxEg== X-Google-Smtp-Source: ABdhPJwGN+sT639SNSnvVeks9Z8AnlabFJI2Hiwu5c/4XgTGE01b61NdgligQ6oj/JMFLCcfc3Q9/A== X-Received: by 2002:a05:6000:15c5:b0:207:8fed:f1f1 with SMTP id y5-20020a05600015c500b002078fedf1f1mr379001wry.316.1649880136784; Wed, 13 Apr 2022 13:02:16 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:16 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 17/27] revisions API: have release_revisions() release "mailmap" Date: Wed, 13 Apr 2022 22:01:46 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Extend the the release_revisions() function so that it frees the "mailmap" in the "struct rev_info". The log family of functions now calls the clear_mailmap() function added in fa8afd18e5a (revisions API: provide and use a release_revisions(), 2021-09-19), allowing us to whitelist some tests with "TEST_PASSES_SANITIZE_LEAK=true". Unfortunately having a pointer to a mailmap in "struct rev_info" instead of an embedded member that we "own" get a bit messy, as can be seen in the change to builtin/commit.c. When we free() this data we won't be able to tell apart a pointer to a "mailmap" on the heap from one on the stack. As seen in ea57bc0d41b (log: add --use-mailmap option, 2013-01-05) the "log" family allocates it on the heap, but in the find_author_by_nickname() code added in ea16794e430 (commit: search author pattern against mailmap, 2013-08-23) we allocated it on the stack instead. Ideally we'd simply change that member to a "struct string_list mailmap" and never free() the "mailmap" itself, but that would be a much larger change to the revisions API. We have code that needs to hand an existing "mailmap" to a "struct rev_info", while we could change all of that, let's not go there now. The complexity isn't in the ownership of the "mailmap" per-se, but that various things assume a "rev_info.mailmap == NULL" means "doesn't want mailmap", if we changed that to an init'd "struct string_list we'd need to carefully refactor things to change those assumptions. Let's instead always free() it, and simply declare that if you add such a "mailmap" it must be allocated on the heap. Any modern libc will correctly panic if we free() a stack variable, so this should be safe going forward. Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/commit.c | 5 ++--- revision.c | 9 +++++++++ t/t0056-git-C.sh | 1 + t/t3302-notes-index-expensive.sh | 1 + t/t4055-diff-context.sh | 1 + t/t4066-diff-emit-delay.sh | 1 + t/t7008-filter-branch-null-sha1.sh | 1 + 7 files changed, 16 insertions(+), 3 deletions(-) diff --git a/builtin/commit.c b/builtin/commit.c index c7eda9bbb72..cd6cebcf8c8 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -1100,7 +1100,6 @@ static const char *find_author_by_nickname(const char *name) struct rev_info revs; struct commit *commit; struct strbuf buf = STRBUF_INIT; - struct string_list mailmap = STRING_LIST_INIT_NODUP; const char *av[20]; int ac = 0; @@ -1111,7 +1110,8 @@ static const char *find_author_by_nickname(const char *name) av[++ac] = buf.buf; av[++ac] = NULL; setup_revisions(ac, av, &revs, NULL); - revs.mailmap = &mailmap; + revs.mailmap = xmalloc(sizeof(struct string_list)); + string_list_init_nodup(revs.mailmap); read_mailmap(revs.mailmap); if (prepare_revision_walk(&revs)) @@ -1122,7 +1122,6 @@ static const char *find_author_by_nickname(const char *name) ctx.date_mode.type = DATE_NORMAL; strbuf_release(&buf); format_commit_message(commit, "%aN <%aE>", &buf, &ctx); - clear_mailmap(&mailmap); release_revisions(&revs); return strbuf_detach(&buf, NULL); } diff --git a/revision.c b/revision.c index 553f7de8250..622f0faecc4 100644 --- a/revision.c +++ b/revision.c @@ -2926,10 +2926,19 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s return left; } +static void release_revisions_mailmap(struct string_list *mailmap) +{ + if (!mailmap) + return; + clear_mailmap(mailmap); + free(mailmap); +} + void release_revisions(struct rev_info *revs) { free_commit_list(revs->commits); object_array_clear(&revs->pending); + release_revisions_mailmap(revs->mailmap); } static void add_child(struct rev_info *revs, struct commit *parent, struct commit *child) diff --git a/t/t0056-git-C.sh b/t/t0056-git-C.sh index 2630e756dab..752aa8c9454 100755 --- a/t/t0056-git-C.sh +++ b/t/t0056-git-C.sh @@ -2,6 +2,7 @@ test_description='"-C " option and its effects on other path-related options' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success '"git -C " runs git from the directory ' ' diff --git a/t/t3302-notes-index-expensive.sh b/t/t3302-notes-index-expensive.sh index bb5fea02a03..d0c4d38b4d4 100755 --- a/t/t3302-notes-index-expensive.sh +++ b/t/t3302-notes-index-expensive.sh @@ -8,6 +8,7 @@ test_description='Test commit notes index (expensive!)' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh create_repo () { diff --git a/t/t4055-diff-context.sh b/t/t4055-diff-context.sh index 741e0803c1a..73048d0a526 100755 --- a/t/t4055-diff-context.sh +++ b/t/t4055-diff-context.sh @@ -5,6 +5,7 @@ test_description='diff.context configuration' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup' ' diff --git a/t/t4066-diff-emit-delay.sh b/t/t4066-diff-emit-delay.sh index a1de63b77f8..0ecb3915412 100755 --- a/t/t4066-diff-emit-delay.sh +++ b/t/t4066-diff-emit-delay.sh @@ -4,6 +4,7 @@ test_description='test combined/stat/moved interaction' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh # This test covers a weird 3-way interaction between "--cc -p", which will run diff --git a/t/t7008-filter-branch-null-sha1.sh b/t/t7008-filter-branch-null-sha1.sh index 9ba9f24ad2f..93fbc92b8db 100755 --- a/t/t7008-filter-branch-null-sha1.sh +++ b/t/t7008-filter-branch-null-sha1.sh @@ -1,6 +1,7 @@ #!/bin/sh test_description='filter-branch removal of trees with null sha1' + . ./test-lib.sh test_expect_success 'setup: base commits' ' From patchwork Wed Apr 13 20:01:47 2022 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: 12812610 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id BD76EC433EF for ; Wed, 13 Apr 2022 20:02:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238599AbiDMUFP (ORCPT ); Wed, 13 Apr 2022 16:05:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41102 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238609AbiDMUEo (ORCPT ); Wed, 13 Apr 2022 16:04:44 -0400 Received: from mail-wr1-x435.google.com (mail-wr1-x435.google.com [IPv6:2a00:1450:4864:20::435]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4B5D87CDF3 for ; Wed, 13 Apr 2022 13:02:19 -0700 (PDT) Received: by mail-wr1-x435.google.com with SMTP id t1so4174978wra.4 for ; Wed, 13 Apr 2022 13:02:19 -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=e8bZvKGjCl7SMOUOilkLeLaFuTcVHw49cufLrm5s53E=; b=Y6800MX8rB2crO8KjH9lx7VKhLtV3KjHaGt53rDapuJdPHZqj3mAivWka5q2BeXGNv U6PAwTiLEWYN8PkVcvDlUIQ/uyUfXmWiuZE1nvUgeXldDT/37mjn7P4tiet5ucP+Xkcu P4vxZoLpQfdiGruXPItGul+hSeupX/Kyg3tshtZTDainPipbNH/zOqH1Yt+VzhHHdCxx auVbwsWxhFsvv0a1tqGtAKeBq5TFPoIFVQqvOMMpbdODxlN4VmtEBXNjMT/l+yKhf9FU 1AuTwmGm+lhMQQo81ueUBBn+yGQHXlrLuX19/MfPt0yQ5PlfJ/GebrkqL6ZhJXbVMm+F MotQ== 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=e8bZvKGjCl7SMOUOilkLeLaFuTcVHw49cufLrm5s53E=; b=lqzL8kuZ64HjUO1U+iV2/QU4GgeUUcts9CGqrwVGvf9B0wJeJ4Q5CB591L4lp/QH2X bLEJpclRMANYw4KqqrjqQH5rX0Nf4x39bUmCv8dqoSxzuZHEGpXp/WAvZsV1z/vd5NLO rxw95p90qlUETcKL0BqB6fncWiy1GlUwnY4nuP1ua4KLlQZ3hesD3n3V9KvO1yY2kaVz i0UWmXKOmWeWCR6QdUbHJ95kchF/Xh/FIjOkCNtg61r5KvNuEr7JMoyVviUYz5rF3pG1 0R+OxcS7Hpy3PvmIJfr9fXTFULvj3ZLH9726QbTN6RpCaiGezNeLDTegdv+FO8qQ+uYD pf2g== X-Gm-Message-State: AOAM531ciZIpH+DwWFs+DwA9Lbqk9G7zl3iK2jY2qvXUr74+m4Wg0+yX 72oVg5wZ0jQ4adGoNt9oCEEpbcB/h++GQw== X-Google-Smtp-Source: ABdhPJyazZJJRETFWWC6YNwXx/WsNzMiXBUDKXR5+zi2s46yjuVz0UoAFgevntuoywFbI8hPZjyYKA== X-Received: by 2002:a5d:6449:0:b0:207:a1f4:b52 with SMTP id d9-20020a5d6449000000b00207a1f40b52mr330194wrw.511.1649880137729; Wed, 13 Apr 2022 13:02:17 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:17 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 18/27] revisions API: have release_revisions() release "cmdline" Date: Wed, 13 Apr 2022 22:01:47 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Extend the the release_revisions() function so that it frees the "cmdline" in the "struct rev_info". This in combination with a preceding change to free "commits" and "mailmap" means that we can whitelist another test under "TEST_PASSES_SANITIZE_LEAK=true". There was a proposal in [1] to do away with xstrdup()-ing this add_rev_cmdline(), perhaps that would be worthwhile, but for now let's just free() it. We could also make that a "char *" in "struct rev_cmdline_entry" itself, but since we own it let's expose it as a constant to outside callers. I proposed that in [2] but have since changed my mind. See 14d30cdfc04 (ref-filter: fix memory leak in `free_array_item()`, 2019-07-10), c514c62a4fd (checkout: fix leak of non-existent branch names, 2020-08-14) and other log history hits for "free((char *)" for prior art. This includes the tests we had false-positive passes on before my 6798b08e848 (perl Git.pm: don't ignore signalled failure in _cmd_close(), 2022-02-01), now they pass for real. Since there are 66 tests matching t/t[0-9]*git-svn*.sh it's easier to list those that don't pass than to touch most of those 66. So let's introduce a "TEST_FAILS_SANITIZE_LEAK=true", which if set in the tests won't cause lib-git-svn.sh to set "TEST_PASSES_SANITIZE_LEAK=true. This change also marks all the tests that we removed "TEST_FAILS_SANITIZE_LEAK=true" from in an earlier commit due to removing the UNLEAK() from cmd_format_patch(), we can now assert that its API use doesn't leak any "struct rev_info" memory. This change also made commit "t5503-tagfollow.sh" pass on current master, but that would regress when combined with ps/fetch-atomic-fixup's de004e848a9 (t5503: simplify setup of test which exercises failure of backfill, 2022-03-03) (through no fault of that topic, that change started using "git clone" in the test, which has an outstanding leak). Let's leave that test out for now to avoid in-flight semantic conflicts. 1. https://lore.kernel.org/git/YUj%2FgFRh6pwrZalY@carlos-mbp.lan/ 2. https://lore.kernel.org/git/87o88obkb1.fsf@evledraar.gmail.com/ Signed-off-by: Ævar Arnfjörð Bjarmason --- revision.c | 10 ++++++++++ t/lib-git-svn.sh | 4 ++++ t/t0062-revision-walking.sh | 1 + t/t0101-at-syntax.sh | 2 ++ t/t1060-object-corruption.sh | 1 + t/t3303-notes-subtrees.sh | 1 + t/t3305-notes-fanout.sh | 1 + t/t3408-rebase-multi-line.sh | 1 + t/t4027-diff-submodule.sh | 1 + t/t4128-apply-root.sh | 1 + t/t4212-log-corrupt.sh | 1 + t/t5515-fetch-merge-logic.sh | 1 + t/t5518-fetch-exit-status.sh | 1 + t/t6002-rev-list-bisect.sh | 1 + t/t6003-rev-list-topo-order.sh | 1 + t/t6005-rev-list-count.sh | 1 + t/t6018-rev-list-glob.sh | 1 + t/t6100-rev-list-in-order.sh | 1 + t/t9100-git-svn-basic.sh | 1 + t/t9101-git-svn-props.sh | 2 ++ t/t9104-git-svn-follow-parent.sh | 2 ++ t/t9106-git-svn-commit-diff-clobber.sh | 2 ++ t/t9115-git-svn-dcommit-funky-renames.sh | 1 + t/t9116-git-svn-log.sh | 2 ++ t/t9122-git-svn-author.sh | 2 ++ t/t9127-git-svn-partial-rebuild.sh | 2 ++ t/t9129-git-svn-i18n-commitencoding.sh | 1 + t/t9132-git-svn-broken-symlink.sh | 1 + t/t9139-git-svn-non-utf8-commitencoding.sh | 1 + t/t9146-git-svn-empty-dirs.sh | 2 ++ t/t9148-git-svn-propset.sh | 1 + t/t9151-svn-mergeinfo.sh | 1 + t/t9160-git-svn-preserve-empty-dirs.sh | 1 + t/t9162-git-svn-dcommit-interactive.sh | 2 ++ t/t9164-git-svn-dcommit-concurrent.sh | 2 ++ t/t9501-gitweb-standalone-http-status.sh | 1 + 36 files changed, 58 insertions(+) diff --git a/revision.c b/revision.c index 622f0faecc4..de4076e77de 100644 --- a/revision.c +++ b/revision.c @@ -2926,6 +2926,15 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s return left; } +static void release_revisions_cmdline(struct rev_cmdline_info *cmdline) +{ + unsigned int i; + + for (i = 0; i < cmdline->nr; i++) + free((char *)cmdline->rev[i].name); + free(cmdline->rev); +} + static void release_revisions_mailmap(struct string_list *mailmap) { if (!mailmap) @@ -2938,6 +2947,7 @@ void release_revisions(struct rev_info *revs) { free_commit_list(revs->commits); object_array_clear(&revs->pending); + release_revisions_cmdline(&revs->cmdline); release_revisions_mailmap(revs->mailmap); } diff --git a/t/lib-git-svn.sh b/t/lib-git-svn.sh index 2fde2353fd3..ea28971e8ee 100644 --- a/t/lib-git-svn.sh +++ b/t/lib-git-svn.sh @@ -1,3 +1,7 @@ +if test -z "$TEST_FAILS_SANITIZE_LEAK" +then + TEST_PASSES_SANITIZE_LEAK=true +fi . ./test-lib.sh if test -n "$NO_SVN_TESTS" diff --git a/t/t0062-revision-walking.sh b/t/t0062-revision-walking.sh index 8e215867b8c..b9480c81781 100755 --- a/t/t0062-revision-walking.sh +++ b/t/t0062-revision-walking.sh @@ -5,6 +5,7 @@ test_description='Test revision walking api' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh cat >run_twice_expected <<-EOF diff --git a/t/t0101-at-syntax.sh b/t/t0101-at-syntax.sh index a1998b558f9..878aadd64c9 100755 --- a/t/t0101-at-syntax.sh +++ b/t/t0101-at-syntax.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='various @{whatever} syntax tests' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup' ' diff --git a/t/t1060-object-corruption.sh b/t/t1060-object-corruption.sh index bc89371f534..e8a58b15897 100755 --- a/t/t1060-object-corruption.sh +++ b/t/t1060-object-corruption.sh @@ -1,6 +1,7 @@ #!/bin/sh test_description='see how we handle various forms of corruption' + . ./test-lib.sh # convert "1234abcd" to ".git/objects/12/34abcd" diff --git a/t/t3303-notes-subtrees.sh b/t/t3303-notes-subtrees.sh index eac193757bf..bc9b791d1b9 100755 --- a/t/t3303-notes-subtrees.sh +++ b/t/t3303-notes-subtrees.sh @@ -5,6 +5,7 @@ test_description='Test commit notes organized in subtrees' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh number_of_commits=100 diff --git a/t/t3305-notes-fanout.sh b/t/t3305-notes-fanout.sh index 9976d787f47..64a9915761a 100755 --- a/t/t3305-notes-fanout.sh +++ b/t/t3305-notes-fanout.sh @@ -2,6 +2,7 @@ test_description='Test that adding/removing many notes triggers automatic fanout restructuring' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh path_has_fanout() { diff --git a/t/t3408-rebase-multi-line.sh b/t/t3408-rebase-multi-line.sh index cde3562e3a6..7b4607d72f2 100755 --- a/t/t3408-rebase-multi-line.sh +++ b/t/t3408-rebase-multi-line.sh @@ -5,6 +5,7 @@ test_description='rebasing a commit with multi-line first paragraph.' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t4027-diff-submodule.sh b/t/t4027-diff-submodule.sh index 295da987cce..40164ae07d2 100755 --- a/t/t4027-diff-submodule.sh +++ b/t/t4027-diff-submodule.sh @@ -2,6 +2,7 @@ test_description='difference in submodules' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh . "$TEST_DIRECTORY"/lib-diff.sh diff --git a/t/t4128-apply-root.sh b/t/t4128-apply-root.sh index f6db5a79dd9..ed94c90204e 100755 --- a/t/t4128-apply-root.sh +++ b/t/t4128-apply-root.sh @@ -2,6 +2,7 @@ test_description='apply same filename' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup' ' diff --git a/t/t4212-log-corrupt.sh b/t/t4212-log-corrupt.sh index 0244888a5a7..30a219894bb 100755 --- a/t/t4212-log-corrupt.sh +++ b/t/t4212-log-corrupt.sh @@ -2,6 +2,7 @@ test_description='git log with invalid commit headers' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup' ' diff --git a/t/t5515-fetch-merge-logic.sh b/t/t5515-fetch-merge-logic.sh index 320d26796d2..c100a809c5e 100755 --- a/t/t5515-fetch-merge-logic.sh +++ b/t/t5515-fetch-merge-logic.sh @@ -14,6 +14,7 @@ export GIT_TEST_PROTOCOL_VERSION GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh build_script () { diff --git a/t/t5518-fetch-exit-status.sh b/t/t5518-fetch-exit-status.sh index 5c4ac2556e7..c13120088fa 100755 --- a/t/t5518-fetch-exit-status.sh +++ b/t/t5518-fetch-exit-status.sh @@ -8,6 +8,7 @@ test_description='fetch exit status test' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t6002-rev-list-bisect.sh b/t/t6002-rev-list-bisect.sh index b95a0212adf..162cf50778d 100755 --- a/t/t6002-rev-list-bisect.sh +++ b/t/t6002-rev-list-bisect.sh @@ -4,6 +4,7 @@ # test_description='Tests git rev-list --bisect functionality' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh . "$TEST_DIRECTORY"/lib-t6000.sh # t6xxx specific functions diff --git a/t/t6003-rev-list-topo-order.sh b/t/t6003-rev-list-topo-order.sh index 24d1836f417..1f7d7dd20c1 100755 --- a/t/t6003-rev-list-topo-order.sh +++ b/t/t6003-rev-list-topo-order.sh @@ -5,6 +5,7 @@ test_description='Tests git rev-list --topo-order functionality' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh . "$TEST_DIRECTORY"/lib-t6000.sh # t6xxx specific functions diff --git a/t/t6005-rev-list-count.sh b/t/t6005-rev-list-count.sh index e960049f647..0729f800c3c 100755 --- a/t/t6005-rev-list-count.sh +++ b/t/t6005-rev-list-count.sh @@ -2,6 +2,7 @@ test_description='git rev-list --max-count and --skip test' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup' ' diff --git a/t/t6018-rev-list-glob.sh b/t/t6018-rev-list-glob.sh index 24b34add833..e1abc5c2b32 100755 --- a/t/t6018-rev-list-glob.sh +++ b/t/t6018-rev-list-glob.sh @@ -5,6 +5,7 @@ test_description='rev-list/rev-parse --glob' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh commit () { diff --git a/t/t6100-rev-list-in-order.sh b/t/t6100-rev-list-in-order.sh index e934bc239c5..88ed7bd75a7 100755 --- a/t/t6100-rev-list-in-order.sh +++ b/t/t6100-rev-list-in-order.sh @@ -2,6 +2,7 @@ test_description='rev-list testing in-commit-order' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup a commit history with trees, blobs' ' diff --git a/t/t9100-git-svn-basic.sh b/t/t9100-git-svn-basic.sh index fea41b3c360..7c5b847f584 100755 --- a/t/t9100-git-svn-basic.sh +++ b/t/t9100-git-svn-basic.sh @@ -8,6 +8,7 @@ test_description='git svn basic tests' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh prepare_utf8_locale diff --git a/t/t9101-git-svn-props.sh b/t/t9101-git-svn-props.sh index 8b5681dd68a..d043e80fc34 100755 --- a/t/t9101-git-svn-props.sh +++ b/t/t9101-git-svn-props.sh @@ -4,6 +4,8 @@ # test_description='git svn property tests' + +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh mkdir import diff --git a/t/t9104-git-svn-follow-parent.sh b/t/t9104-git-svn-follow-parent.sh index c7d8e0bf00f..5cf2ef4b8b0 100755 --- a/t/t9104-git-svn-follow-parent.sh +++ b/t/t9104-git-svn-follow-parent.sh @@ -4,6 +4,8 @@ # test_description='git svn fetching' + +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh test_expect_success 'initialize repo' ' diff --git a/t/t9106-git-svn-commit-diff-clobber.sh b/t/t9106-git-svn-commit-diff-clobber.sh index aec45bca3b7..3cab0b9720a 100755 --- a/t/t9106-git-svn-commit-diff-clobber.sh +++ b/t/t9106-git-svn-commit-diff-clobber.sh @@ -2,6 +2,8 @@ # # Copyright (c) 2006 Eric Wong test_description='git svn commit-diff clobber' + +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh test_expect_success 'initialize repo' ' diff --git a/t/t9115-git-svn-dcommit-funky-renames.sh b/t/t9115-git-svn-dcommit-funky-renames.sh index 743fbe1fe46..419f055721d 100755 --- a/t/t9115-git-svn-dcommit-funky-renames.sh +++ b/t/t9115-git-svn-dcommit-funky-renames.sh @@ -5,6 +5,7 @@ test_description='git svn dcommit can commit renames of files with ugly names' +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh test_expect_success 'load repository with strange names' ' diff --git a/t/t9116-git-svn-log.sh b/t/t9116-git-svn-log.sh index 0a9f1ef366d..34f6c80dea3 100755 --- a/t/t9116-git-svn-log.sh +++ b/t/t9116-git-svn-log.sh @@ -4,6 +4,8 @@ # test_description='git svn log tests' + +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh test_expect_success 'setup repository and import' ' diff --git a/t/t9122-git-svn-author.sh b/t/t9122-git-svn-author.sh index 9e8fe38e7ef..527ba3d2932 100755 --- a/t/t9122-git-svn-author.sh +++ b/t/t9122-git-svn-author.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='git svn authorship' + +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh test_expect_success 'setup svn repository' ' diff --git a/t/t9127-git-svn-partial-rebuild.sh b/t/t9127-git-svn-partial-rebuild.sh index 2e4789d061f..90b1b30dde5 100755 --- a/t/t9127-git-svn-partial-rebuild.sh +++ b/t/t9127-git-svn-partial-rebuild.sh @@ -4,6 +4,8 @@ # test_description='git svn partial-rebuild tests' + +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh test_expect_success 'initialize svnrepo' ' diff --git a/t/t9129-git-svn-i18n-commitencoding.sh b/t/t9129-git-svn-i18n-commitencoding.sh index 01e1e8a8f76..185248a4cd7 100755 --- a/t/t9129-git-svn-i18n-commitencoding.sh +++ b/t/t9129-git-svn-i18n-commitencoding.sh @@ -4,6 +4,7 @@ test_description='git svn honors i18n.commitEncoding in config' +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh compare_git_head_with () { diff --git a/t/t9132-git-svn-broken-symlink.sh b/t/t9132-git-svn-broken-symlink.sh index aeceffaf7b0..4d8d0584b79 100755 --- a/t/t9132-git-svn-broken-symlink.sh +++ b/t/t9132-git-svn-broken-symlink.sh @@ -2,6 +2,7 @@ test_description='test that git handles an svn repository with empty symlinks' +TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh test_expect_success 'load svn dumpfile' ' svnadmin load "$rawsvnrepo" < X-Patchwork-Id: 12812608 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 63A9FC433EF for ; Wed, 13 Apr 2022 20:02:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238654AbiDMUFJ (ORCPT ); Wed, 13 Apr 2022 16:05:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41060 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238623AbiDMUE6 (ORCPT ); Wed, 13 Apr 2022 16:04:58 -0400 Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9857A7CDD6 for ; Wed, 13 Apr 2022 13:02:20 -0700 (PDT) Received: by mail-wm1-x32d.google.com with SMTP id l9-20020a05600c4f0900b0038ccd1b8642so3527417wmq.0 for ; Wed, 13 Apr 2022 13:02:20 -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=cpe6I1qsle1tRhmH5U2cq451+pbpnAje2sQznjgGVpA=; b=j+oxM60ylq4AqtLwWj3fBeKhNH50u6rnJTZsny0UZALkLpxwiFjKjMzBL7eyXtkND/ rGPCS98WvzEo0GjldL4/PVQ6ft+rW+k7w8exMwVkUOdHJFnRVy9N49n1MZHsNUXIPJgV 4wjRE3d0Q/7CPgMXzYpS+9OP1BKx2qd+xvGVTAjpoDAf7gWnHqZt3P9EuyP8DZbUrNZQ 2/lEa9srdob+cRttBDVxDIC+QPD0f5KhnYxNSmalyKOBCP2iBNOuoi/FqHwPqynyRQXx kRxagrODq41r7+wvERmPhSmDIf5jdOqsTyMP/z2zwAke3O/Tf7Gl43Fruygo2Zzn0Mll z/Cw== 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=cpe6I1qsle1tRhmH5U2cq451+pbpnAje2sQznjgGVpA=; b=WXNej6+L9rjRZdm1b/COvCc/mGOeZ/J1ARPbDYaWeITV6pyBJfewUbeUVa2gNlBZxb OYCbPHHLKKpsWvJNB/CR/Bda/CFT+pf7IXjrOJTa/tCSxch7z7KZ17DsLjbx9aWPDC7x qCUl8U3nnGhT0RnGZY9nA/WmmiJPnBF/H4GxL0oC8vLtLXvmyO25HLu2qRLH8M+DjOpK uZIzFQZ/Z1HlTz1SaQPTLmHM9g56OogUiGvoZEDGZsYYl8stdsP+mehYMnIeKqQ56caA x914mUO2CbYDfDzDHmfKLn8Z8Bqdi3jiBxBnCB1kFmgjr2xr+4Mxf7z1dFbt/Zhe+tWD G8gA== X-Gm-Message-State: AOAM531kur/EcTBZpQ2wrAKc/9UcXB7YhWNvMBFDZORkufHAuEkwECHs bkZIMnJoxMV500tXyunku0d8wLJIfXHTYw== X-Google-Smtp-Source: ABdhPJzkQ0MrzqXpjlW3TlaAVjDcTvRT9M7V/LXhY9lADTETdW10bMCuMeEV8keJAy+in/kIUFNrqw== X-Received: by 2002:a05:600c:3c8c:b0:38e:4c59:6852 with SMTP id bg12-20020a05600c3c8c00b0038e4c596852mr310791wmb.194.1649880138746; Wed, 13 Apr 2022 13:02:18 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:18 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 19/27] revisions API: have release_revisions() release "filter" Date: Wed, 13 Apr 2022 22:01:48 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Extend the the release_revisions() function so that it frees the "filter" in the "struct rev_info". This in combination with a preceding change to free "cmdline" means that we can mark another set of tests as passing under "TEST_PASSES_SANITIZE_LEAK=true". The "filter" member was added recently in ffaa137f646 (revision: put object filter into struct rev_info, 2022-03-09), and this fixes leaks intruded in the subsequent leak 7940941de1f (pack-objects: use rev.filter when possible, 2022-03-09) and 105c6f14ad3 (bundle: parse filter capability, 2022-03-09). The "builtin/pack-objects.c" leak in 7940941de1f was effectively with us already, but the variable was referred to by a "static" file-scoped variable. The "bundle.c " leak in 105c6f14ad3 was newly introduced with the new "filter" feature for bundles. The "t5600-clone-fail-cleanup.sh" change here to add "TEST_PASSES_SANITIZE_LEAK=true" is one of the cases where run-command.c in not carrying the abort() exit code upwards would have had that test passing before, but now it *actually* passes[1]. We should fix the lack of 1=1 mapping of SANITIZE=leak testing to actual leaks some other time, but it's an existing edge case, let's just mark the really-passing test as passing for now. 1. https://lore.kernel.org/git/220303.86fsnz5o9w.gmgdl@evledraar.gmail.com/ Signed-off-by: Ævar Arnfjörð Bjarmason --- revision.c | 1 + t/t1060-object-corruption.sh | 1 + t/t2015-checkout-unborn.sh | 1 + t/t4207-log-decoration-colors.sh | 1 + t/t5301-sliding-window.sh | 2 ++ t/t5313-pack-bounds-checks.sh | 2 ++ t/t5316-pack-delta-depth.sh | 2 ++ t/t5320-delta-islands.sh | 2 ++ t/t5322-pack-objects-sparse.sh | 1 + t/t5506-remote-groups.sh | 1 + t/t5513-fetch-track.sh | 1 + t/t5532-fetch-proxy.sh | 2 ++ t/t5600-clone-fail-cleanup.sh | 1 + t/t5900-repo-selection.sh | 2 ++ t/t6101-rev-parse-parents.sh | 1 + t/t6114-keep-packs.sh | 2 ++ t/t7702-repack-cyclic-alternate.sh | 2 ++ t/t9127-git-svn-partial-rebuild.sh | 1 - 18 files changed, 25 insertions(+), 1 deletion(-) diff --git a/revision.c b/revision.c index de4076e77de..a9d6d3a8dca 100644 --- a/revision.c +++ b/revision.c @@ -2948,6 +2948,7 @@ void release_revisions(struct rev_info *revs) free_commit_list(revs->commits); object_array_clear(&revs->pending); release_revisions_cmdline(&revs->cmdline); + list_objects_filter_release(&revs->filter); release_revisions_mailmap(revs->mailmap); } diff --git a/t/t1060-object-corruption.sh b/t/t1060-object-corruption.sh index e8a58b15897..5b8e47e346c 100755 --- a/t/t1060-object-corruption.sh +++ b/t/t1060-object-corruption.sh @@ -2,6 +2,7 @@ test_description='see how we handle various forms of corruption' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh # convert "1234abcd" to ".git/objects/12/34abcd" diff --git a/t/t2015-checkout-unborn.sh b/t/t2015-checkout-unborn.sh index a9721215fab..9425aae6395 100755 --- a/t/t2015-checkout-unborn.sh +++ b/t/t2015-checkout-unborn.sh @@ -4,6 +4,7 @@ test_description='checkout from unborn branch' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup' ' diff --git a/t/t4207-log-decoration-colors.sh b/t/t4207-log-decoration-colors.sh index b8709424981..36ac6aff1e4 100755 --- a/t/t4207-log-decoration-colors.sh +++ b/t/t4207-log-decoration-colors.sh @@ -8,6 +8,7 @@ test_description='Test for "git log --decorate" colors' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t5301-sliding-window.sh b/t/t5301-sliding-window.sh index 76f9798ab95..3ccaaeb3977 100755 --- a/t/t5301-sliding-window.sh +++ b/t/t5301-sliding-window.sh @@ -4,6 +4,8 @@ # test_description='mmap sliding window tests' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success \ diff --git a/t/t5313-pack-bounds-checks.sh b/t/t5313-pack-bounds-checks.sh index 535313e4dc8..cc4cfaa9d37 100755 --- a/t/t5313-pack-bounds-checks.sh +++ b/t/t5313-pack-bounds-checks.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='bounds-checking of access to mmapped on-disk file formats' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh clear_base () { diff --git a/t/t5316-pack-delta-depth.sh b/t/t5316-pack-delta-depth.sh index e9045009a11..eb4ef3dda4d 100755 --- a/t/t5316-pack-delta-depth.sh +++ b/t/t5316-pack-delta-depth.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='pack-objects breaks long cross-pack delta chains' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh # This mirrors a repeated push setup: diff --git a/t/t5320-delta-islands.sh b/t/t5320-delta-islands.sh index fea92a5777f..124d47603df 100755 --- a/t/t5320-delta-islands.sh +++ b/t/t5320-delta-islands.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='exercise delta islands' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh # returns true iff $1 is a delta based on $2 diff --git a/t/t5322-pack-objects-sparse.sh b/t/t5322-pack-objects-sparse.sh index d39958c066d..770695c9278 100755 --- a/t/t5322-pack-objects-sparse.sh +++ b/t/t5322-pack-objects-sparse.sh @@ -4,6 +4,7 @@ test_description='pack-objects object selection using sparse algorithm' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup repo' ' diff --git a/t/t5506-remote-groups.sh b/t/t5506-remote-groups.sh index 8f150c0793e..5bac03ede81 100755 --- a/t/t5506-remote-groups.sh +++ b/t/t5506-remote-groups.sh @@ -4,6 +4,7 @@ test_description='git remote group handling' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh mark() { diff --git a/t/t5513-fetch-track.sh b/t/t5513-fetch-track.sh index 65d1e05bd62..c46c4dbaefc 100755 --- a/t/t5513-fetch-track.sh +++ b/t/t5513-fetch-track.sh @@ -2,6 +2,7 @@ test_description='fetch follows remote-tracking branches correctly' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t5532-fetch-proxy.sh b/t/t5532-fetch-proxy.sh index 9c2798603b4..d664912799b 100755 --- a/t/t5532-fetch-proxy.sh +++ b/t/t5532-fetch-proxy.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='fetching via git:// using core.gitproxy' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup remote repo' ' diff --git a/t/t5600-clone-fail-cleanup.sh b/t/t5600-clone-fail-cleanup.sh index 34b3df40275..c814afa5656 100755 --- a/t/t5600-clone-fail-cleanup.sh +++ b/t/t5600-clone-fail-cleanup.sh @@ -13,6 +13,7 @@ Unless the directory already exists, in which case we clean up only what we wrote. ' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh corrupt_repo () { diff --git a/t/t5900-repo-selection.sh b/t/t5900-repo-selection.sh index 14e59c5b3e4..a84faac242d 100755 --- a/t/t5900-repo-selection.sh +++ b/t/t5900-repo-selection.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='selecting remote repo in ambiguous cases' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh reset() { diff --git a/t/t6101-rev-parse-parents.sh b/t/t6101-rev-parse-parents.sh index c571fa51797..a3a41c7a3e4 100755 --- a/t/t6101-rev-parse-parents.sh +++ b/t/t6101-rev-parse-parents.sh @@ -8,6 +8,7 @@ test_description='Test git rev-parse with different parent options' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_cmp_rev_output () { diff --git a/t/t6114-keep-packs.sh b/t/t6114-keep-packs.sh index 9239d8aa46d..44246f8a63e 100755 --- a/t/t6114-keep-packs.sh +++ b/t/t6114-keep-packs.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='rev-list with .keep packs' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup' ' diff --git a/t/t7702-repack-cyclic-alternate.sh b/t/t7702-repack-cyclic-alternate.sh index 93b74867ac8..f3cdb98eec2 100755 --- a/t/t7702-repack-cyclic-alternate.sh +++ b/t/t7702-repack-cyclic-alternate.sh @@ -4,6 +4,8 @@ # test_description='repack involving cyclic alternate' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t9127-git-svn-partial-rebuild.sh b/t/t9127-git-svn-partial-rebuild.sh index 90b1b30dde5..97f495bd49b 100755 --- a/t/t9127-git-svn-partial-rebuild.sh +++ b/t/t9127-git-svn-partial-rebuild.sh @@ -5,7 +5,6 @@ test_description='git svn partial-rebuild tests' -TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh test_expect_success 'initialize svnrepo' ' From patchwork Wed Apr 13 20:01:49 2022 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: 12812609 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0EF92C433F5 for ; Wed, 13 Apr 2022 20:02:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238670AbiDMUFN (ORCPT ); Wed, 13 Apr 2022 16:05:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41502 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238625AbiDMUE6 (ORCPT ); Wed, 13 Apr 2022 16:04:58 -0400 Received: from mail-wr1-x434.google.com (mail-wr1-x434.google.com [IPv6:2a00:1450:4864:20::434]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 994297D037 for ; Wed, 13 Apr 2022 13:02:21 -0700 (PDT) Received: by mail-wr1-x434.google.com with SMTP id m14so4172538wrb.6 for ; Wed, 13 Apr 2022 13:02:21 -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=xLyiUSai2IxfyPtvWsgpqYaOSiGO6goubINiSTf2+XE=; b=m2cSg7BV7ARA8VZVC3H+gyrJ9o6kKpP6n4Yy+ZG3N7j6htUiekieijBUYjpfszoRKe W4Y0Ei4QjHXV7KK4tP2EPbhKRL560NKc0ySAChrufR7oFmR7bmEppsJWUN/9qN2JaE/F VnVRNdtZ4Jk+HCEKXDyf6LeSA3Ppz2lPbm68gos4ZQDDj1eSe4RMl/UVcp32jCx4xArv CqZkgVcQ3kgS07/7hTYE5fhUFCUdVVxQotu7aQPAaJJekQNiaeYlA3C1UmsmcUSu1aLM p3RHhEQNXusGcQptdCczFzGuv3j/jYccfLb/MygRVLsvAeoCunK2wha5wD932h4LnQfo EsDQ== 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=xLyiUSai2IxfyPtvWsgpqYaOSiGO6goubINiSTf2+XE=; b=MMnzEeOIdxNdM1UItwrjx71LGLi+o0rr7FpU6yHg64kGsKNUjEZp5MyeaYpPEb6HO9 fwlNwpibMW1GvLT/rT/fuxOa3mf52MzWOJJ6ROevRYrlxudFffsgnWL1msmpEhLAgnWZ DwFfM6L65jM+eqcSGqejvoUoKJlq2FGQF3dHC8u0l7945NrfUaa/QyCvwON2y8BA0rw2 VoR3Zjpo/SQEZ4ijDMp2JRHhKeOnRfErgkWLxYLuXDDkKNFvbPoJPyLQK6JVW9+nWxja D7JQmM5g+KXKdqNZ+vn7R6Z7A8w+Ux6DkCon7S3Pj2eMcN582LRNya7WEObDRM5Gw3Dn 0LAw== X-Gm-Message-State: AOAM532AogJNEJEMGicR+Swx80Nm//PWKqoM3ITzg16o4gdvpM+xEbbW Qh3nHUh3sMIwIsX3i47OjYv8dYGL6NXqNg== X-Google-Smtp-Source: ABdhPJzAYeV01u4Npop2GLkpGLmefq6EOa7xXicxfx0wuETXE4CB2nreuYOHWWfPA0PIMGxbXrCeCA== X-Received: by 2002:a05:6000:1ac9:b0:205:8461:5664 with SMTP id i9-20020a0560001ac900b0020584615664mr350243wry.123.1649880139721; Wed, 13 Apr 2022 13:02:19 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:19 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 20/27] revisions API: have release_revisions() release "grep_filter" Date: Wed, 13 Apr 2022 22:01:49 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Extend the the release_revisions() function so that it frees the "grep_filter" in the "struct rev_info".This allows us to mark a test as passing under "TEST_PASSES_SANITIZE_LEAK=true". Signed-off-by: Ævar Arnfjörð Bjarmason --- revision.c | 1 + t/t9151-svn-mergeinfo.sh | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/revision.c b/revision.c index a9d6d3a8dca..1db58c3e4db 100644 --- a/revision.c +++ b/revision.c @@ -2950,6 +2950,7 @@ void release_revisions(struct rev_info *revs) release_revisions_cmdline(&revs->cmdline); list_objects_filter_release(&revs->filter); release_revisions_mailmap(revs->mailmap); + free_grep_patterns(&revs->grep_filter); } static void add_child(struct rev_info *revs, struct commit *parent, struct commit *child) diff --git a/t/t9151-svn-mergeinfo.sh b/t/t9151-svn-mergeinfo.sh index 85221d439bd..c93a5beab25 100755 --- a/t/t9151-svn-mergeinfo.sh +++ b/t/t9151-svn-mergeinfo.sh @@ -5,7 +5,6 @@ test_description='git-svn svn mergeinfo properties' -TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh test_expect_success 'load svn dump' " From patchwork Wed Apr 13 20:01:50 2022 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: 12812611 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A1404C433FE for ; Wed, 13 Apr 2022 20:02:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238677AbiDMUFS (ORCPT ); Wed, 13 Apr 2022 16:05:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41504 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238631AbiDMUE7 (ORCPT ); Wed, 13 Apr 2022 16:04:59 -0400 Received: from mail-wm1-x32b.google.com (mail-wm1-x32b.google.com [IPv6:2a00:1450:4864:20::32b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7BF367B55C for ; Wed, 13 Apr 2022 13:02:22 -0700 (PDT) Received: by mail-wm1-x32b.google.com with SMTP id r64so1763345wmr.4 for ; Wed, 13 Apr 2022 13:02:22 -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=hSkBur+QTC5OUIv+TFHm8crGorFFVGJrGuB5Jbg6kRY=; b=euKYGPXXs1WGNFdxD0jxF6aMahrwCadDiXoshIvcTH7dlg2OLJ0vW3WldSqAnVw7iU Y6dq5F8+u+78ATxFYnMDfQwXR5G+mwX7BdYLa6hv151ZUUCUGc4GEWEN4aIFjrEJQhml I47NLtxy2f4rmGJNsw5ciw9jaBpfGSN1CTR4g8muSH/sp6rH5EzjIx4iF7zkv7mTQYIH MazlA3dZsdx7eW+wAyi60qDjfKy23PaaM7Xfg2iEgkKlpm7XAlaNkAB03B9CzYRc5kvT foVJUE1dzSMf0GQ7OoU7ambZ+5HdDY/bASD35QzCL+bK1lkp5zcGCCP2STw0gEiiWbnE JK+w== 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=hSkBur+QTC5OUIv+TFHm8crGorFFVGJrGuB5Jbg6kRY=; b=0dEHpd/M8IVDRh1FFsCfeter5tfExORGyeHg/dFrQpBVafJOE1PcijPhHrnAHTo4ea UTbUIH9bSfQrtJpjx8mg6P0pCNJSYPHE5Redxs8x/IFpiOf7eZmXVjo+PCwRsjGVw1wd j22dEHytdJsCDz6Tu9CNdnAs2ta3lJHTp9/Lr1YQ1/AuqV4rudEUFv26WybraMIuzOvC EAxMaR85wX6DJJ550b7Tx2mVXbe4MqCxV4fBfZCzQ62q+qLj6oBVMxyIDDNQo86A6A0f 3D+GJqAofTe4CULdNh0Uh/j0QzpbFsYLg2NEM/68jjdPkQByL7c6EmQ5cGZHprZ40GU9 rCSw== X-Gm-Message-State: AOAM531L4dMRVVXUmnhBL4+2IP2sZVezHqRHexP572yVRqV30gFDvL2s cqgfi/Mvr3XZ4vbW27qXijD0gu+c1dEx8Q== X-Google-Smtp-Source: ABdhPJw1nOStHr8GDAqd8gbwoYrGXEQdpTAVZGdY8+araleODgIevdcsGtOUIeNW50j0elUB1+Pqiw== X-Received: by 2002:a05:600c:4e12:b0:38b:b715:18a6 with SMTP id b18-20020a05600c4e1200b0038bb71518a6mr297559wmq.17.1649880140664; Wed, 13 Apr 2022 13:02:20 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:20 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 21/27] revisions API: have release_revisions() release "prune_data" Date: Wed, 13 Apr 2022 22:01:50 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Extend the the release_revisions() function so that it frees the "prune_data" in the "struct rev_info". This means that any code that calls "release_revisions()" already can get rid of adjacent calls to clear_pathspec(). Signed-off-by: Ævar Arnfjörð Bjarmason --- add-interactive.c | 2 -- builtin/add.c | 1 - builtin/stash.c | 2 -- diff-lib.c | 1 - revision.c | 1 + wt-status.c | 2 -- 6 files changed, 1 insertion(+), 8 deletions(-) diff --git a/add-interactive.c b/add-interactive.c index 54cdfc82017..6047e8f6489 100644 --- a/add-interactive.c +++ b/add-interactive.c @@ -568,8 +568,6 @@ static int get_modified_files(struct repository *r, run_diff_files(&rev, 0); } - if (ps) - clear_pathspec(&rev.prune_data); release_revisions(&rev); } hashmap_clear_and_free(&s.file_map, struct pathname_entry, ent); diff --git a/builtin/add.c b/builtin/add.c index 115a26ea633..fc729e14c17 100644 --- a/builtin/add.c +++ b/builtin/add.c @@ -142,7 +142,6 @@ int add_files_to_cache(const char *prefix, rev.diffopt.flags.override_submodule_config = 1; rev.max_count = 0; /* do not compare unmerged paths with stage #2 */ run_diff_files(&rev, DIFF_RACY_IS_MODIFIED); - clear_pathspec(&rev.prune_data); release_revisions(&rev); return !!data.add_errors; } diff --git a/builtin/stash.c b/builtin/stash.c index fce4393d123..16aad4b4d35 100644 --- a/builtin/stash.c +++ b/builtin/stash.c @@ -1064,7 +1064,6 @@ static int check_changes_tracked_files(const struct pathspec *ps) } done: - clear_pathspec(&rev.prune_data); release_revisions(&rev); return ret; } @@ -1276,7 +1275,6 @@ static int stash_working_tree(struct stash_info *info, const struct pathspec *ps done: discard_index(&istate); - clear_pathspec(&rev.prune_data); release_revisions(&rev); strbuf_release(&diff_output); remove_path(stash_index_path.buf); diff --git a/diff-lib.c b/diff-lib.c index 0f16281253f..298265e5b54 100644 --- a/diff-lib.c +++ b/diff-lib.c @@ -641,7 +641,6 @@ int do_diff_cache(const struct object_id *tree_oid, struct diff_options *opt) if (diff_cache(&revs, tree_oid, NULL, 1)) exit(128); - clear_pathspec(&revs.prune_data); release_revisions(&revs); return 0; } diff --git a/revision.c b/revision.c index 1db58c3e4db..6f444eaaeba 100644 --- a/revision.c +++ b/revision.c @@ -2949,6 +2949,7 @@ void release_revisions(struct rev_info *revs) object_array_clear(&revs->pending); release_revisions_cmdline(&revs->cmdline); list_objects_filter_release(&revs->filter); + clear_pathspec(&revs->prune_data); release_revisions_mailmap(revs->mailmap); free_grep_patterns(&revs->grep_filter); } diff --git a/wt-status.c b/wt-status.c index a14fad1e03a..61e0c1022f5 100644 --- a/wt-status.c +++ b/wt-status.c @@ -616,7 +616,6 @@ static void wt_status_collect_changes_worktree(struct wt_status *s) rev.diffopt.rename_score = s->rename_score >= 0 ? s->rename_score : rev.diffopt.rename_score; copy_pathspec(&rev.prune_data, &s->pathspec); run_diff_files(&rev, 0); - clear_pathspec(&rev.prune_data); release_revisions(&rev); } @@ -664,7 +663,6 @@ static void wt_status_collect_changes_index(struct wt_status *s) copy_pathspec(&rev.prune_data, &s->pathspec); run_diff_index(&rev, 1); release_revisions(&rev); - clear_pathspec(&rev.prune_data); } static int add_file_to_list(const struct object_id *oid, From patchwork Wed Apr 13 20:01:51 2022 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: 12812613 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 56E0BC433EF for ; Wed, 13 Apr 2022 20:03:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238680AbiDMUFW (ORCPT ); Wed, 13 Apr 2022 16:05:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41050 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238638AbiDMUE7 (ORCPT ); Wed, 13 Apr 2022 16:04:59 -0400 Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7D6E37C7B3 for ; Wed, 13 Apr 2022 13:02:23 -0700 (PDT) Received: by mail-wm1-x32c.google.com with SMTP id q8so1542492wmc.0 for ; Wed, 13 Apr 2022 13:02:23 -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=iEvi1ymFe5THNC3zqKJyzC7Pex7PWuXIit+ed3BzBhg=; b=CV+S2LJrN9D95xeh8Pit3XHYd0Yk7VYxiosnKmi5IC/y9sv1FgikXLTscIj91i1i7i Jg1vQ3CAUPjnDmvb7Izj/7npiAeCymKrZz7J+PBRrpVW92KNxfHjzm5ZUtxd70EBz3Rw 9bK08NfQ3enr4yYlrZdq+mHsGdM1HKTXN8MIO9piMA5i40UvdAYsBzctAP/6MtD6CMc2 LlDgErYhX6tuPXrO4vJ6rek9ypEptUQazm0T3H9746izq7+0f2RFWlduXnAvmu728kha TATyHYQiUKddOb6OICS6U6i3qkMJRTfgFnnlivw1U0GX0Jg1CP1YuljljPt/oxozeJNc S8BQ== 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=iEvi1ymFe5THNC3zqKJyzC7Pex7PWuXIit+ed3BzBhg=; b=V6Sci2ZMK9ua6xOwrl6c61fDKdxcdJkno2tXqGlFedJp2Xr1DN8QrKsLLeulUWkTLw VW7HdMWnvRmSkZsn6gxoGR20jTmVXFR7tfzM7FDEZo2VrdrfDeryv9eXrfv8Z5rwYjNP T9D3z2cSHybYWNKV4RKvK7bF+NTo0gjl+uNyQ8EUBr8rpoeDMAG1ULb1QwV2sMCRJoJV +DIcDWfORubsL/c2azzKMwVqxBkPeMUYtWclstIwFHZXOftw0y8YYpn8u7GCZt99TXT5 zQDHP7G0VnK7QsBmLGOqeXtkLkS5vQ/fwmN8q8ekyThFIG5LM00BzGdNrp0OmtTaUFep cxtg== X-Gm-Message-State: AOAM5309LH6r/ycuUWj7tmMKf86YNwv7AMTeu5vOuI026GCfD2QFxZpl b96TKt3ZgL45VNrY8qKox0hsAJJXfAQ/VQ== X-Google-Smtp-Source: ABdhPJwPjhgKuVDfiGGlAQHmxjgZ/68OKuC/nqrepJP1Ogzy+GTviTBeOC6hh2Mu/2I0ozS83dwuNg== X-Received: by 2002:a05:600c:3ba9:b0:38e:c8c6:ae0d with SMTP id n41-20020a05600c3ba900b0038ec8c6ae0dmr317590wms.120.1649880141729; Wed, 13 Apr 2022 13:02:21 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:20 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 22/27] revisions API: clear "boundary_commits" in release_revisions() Date: Wed, 13 Apr 2022 22:01:51 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Clear the "boundary_commits" object_array in release_revisions(). This makes a few more tests pass under SANITIZE=leak, including "t/t4126-apply-empty.sh" which started failed as an UNLEAK() in cmd_format_patch() was removed in a preceding commit. This also re-marks the various tests relying on "git format-patch" as passing under "SANITIZE=leak", in the preceding "revisions API users: use release_revisions() in builtin/log.c" commit those were marked as failing as we removed the UNLEAK(rev) from cmd_format_patch() in "builtin/log.c". Signed-off-by: Ævar Arnfjörð Bjarmason --- revision.c | 1 + t/t4021-format-patch-numbered.sh | 1 + t/t4028-format-patch-mime-headers.sh | 2 ++ t/t4036-format-patch-signer-mime.sh | 1 + t/t4122-apply-symlink-inside.sh | 1 + t/t4126-apply-empty.sh | 1 + t/t6110-rev-list-sparse.sh | 1 + t/t9001-send-email.sh | 1 + t/t9116-git-svn-log.sh | 1 - 9 files changed, 9 insertions(+), 1 deletion(-) diff --git a/revision.c b/revision.c index 6f444eaaeba..5aa6dec4532 100644 --- a/revision.c +++ b/revision.c @@ -2947,6 +2947,7 @@ void release_revisions(struct rev_info *revs) { free_commit_list(revs->commits); object_array_clear(&revs->pending); + object_array_clear(&revs->boundary_commits); release_revisions_cmdline(&revs->cmdline); list_objects_filter_release(&revs->filter); clear_pathspec(&revs->prune_data); diff --git a/t/t4021-format-patch-numbered.sh b/t/t4021-format-patch-numbered.sh index 9be65fd4440..1219aa226dc 100755 --- a/t/t4021-format-patch-numbered.sh +++ b/t/t4021-format-patch-numbered.sh @@ -5,6 +5,7 @@ test_description='Format-patch numbering options' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t4028-format-patch-mime-headers.sh b/t/t4028-format-patch-mime-headers.sh index 204ba673cb5..60cb819c42e 100755 --- a/t/t4028-format-patch-mime-headers.sh +++ b/t/t4028-format-patch-mime-headers.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='format-patch mime headers and extra headers do not conflict' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'create commit with utf-8 body' ' diff --git a/t/t4036-format-patch-signer-mime.sh b/t/t4036-format-patch-signer-mime.sh index 98d9713d8b2..48655bcc789 100755 --- a/t/t4036-format-patch-signer-mime.sh +++ b/t/t4036-format-patch-signer-mime.sh @@ -2,6 +2,7 @@ test_description='format-patch -s should force MIME encoding as needed' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t4122-apply-symlink-inside.sh b/t/t4122-apply-symlink-inside.sh index aa52de401b9..96965373036 100755 --- a/t/t4122-apply-symlink-inside.sh +++ b/t/t4122-apply-symlink-inside.sh @@ -4,6 +4,7 @@ test_description='apply to deeper directory without getting fooled with symlink' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t4126-apply-empty.sh b/t/t4126-apply-empty.sh index 66a7ba8ab8f..ece9fae207d 100755 --- a/t/t4126-apply-empty.sh +++ b/t/t4126-apply-empty.sh @@ -2,6 +2,7 @@ test_description='apply empty' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t6110-rev-list-sparse.sh b/t/t6110-rev-list-sparse.sh index 13c1da53528..ddefc7f24ee 100755 --- a/t/t6110-rev-list-sparse.sh +++ b/t/t6110-rev-list-sparse.sh @@ -4,6 +4,7 @@ test_description='operations that cull histories in unusual ways' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh index 42694fe5841..01c74b8b075 100755 --- a/t/t9001-send-email.sh +++ b/t/t9001-send-email.sh @@ -4,6 +4,7 @@ test_description='git send-email' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh # May be altered later in the test diff --git a/t/t9116-git-svn-log.sh b/t/t9116-git-svn-log.sh index 34f6c80dea3..d74d7b2de68 100755 --- a/t/t9116-git-svn-log.sh +++ b/t/t9116-git-svn-log.sh @@ -5,7 +5,6 @@ test_description='git svn log tests' -TEST_FAILS_SANITIZE_LEAK=true . ./lib-git-svn.sh test_expect_success 'setup repository and import' ' From patchwork Wed Apr 13 20:01:52 2022 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: 12812612 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5384EC433F5 for ; Wed, 13 Apr 2022 20:03:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238679AbiDMUFV (ORCPT ); Wed, 13 Apr 2022 16:05:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41522 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238639AbiDMUE7 (ORCPT ); Wed, 13 Apr 2022 16:04:59 -0400 Received: from mail-wm1-x32f.google.com (mail-wm1-x32f.google.com [IPv6:2a00:1450:4864:20::32f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DE54F7DA80 for ; Wed, 13 Apr 2022 13:02:24 -0700 (PDT) Received: by mail-wm1-x32f.google.com with SMTP id r64so1763417wmr.4 for ; Wed, 13 Apr 2022 13:02:24 -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=e2kCKOXeROM1QT7hkTHbQ2MCROG15/goV1dWalxaf/c=; b=dz5VELKiJH3RXtmume7YVBFJYRTCAa/fGmKZIEptCJ5lIwohwxuYQJ3c6aL8R/q0KX yJMM1YSC4mgBYEtUcngDKuIcT0CSwdNLoBWinkZneR36fnThxbvs/xZG5UIXsTx4RuQ2 fyTXCtenftpi7wBZGeedZZ3B2JCeYaTbtV7VBzsAQttH6hYarzezPDdwobnI+tiTvtRJ 6jSJ2eVG/rnYaBdDWWn4qKuzSvEHjynbZJ2EFdKkvSZjbu4I9cqxCE6b6QlWhqeWEKtI hUm3Uji1ZJL6pjsvMHnPZrJzUQ7b04NCQF3LNz3H9XcA7IPmm0l1eMoOBnhZiEeZT9tn TdAA== 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=e2kCKOXeROM1QT7hkTHbQ2MCROG15/goV1dWalxaf/c=; b=GICnfsBUF0YvYOn0ZjPU2/zaMnmFBefv1XZlFuPUpsyjodkChNAhTDpB6+aF+XZd2+ zIU8NtQGorYQCaOCPkVfNyVQWlr2K+byyHAexsMYpnemxZh9JB7PX7hrAa0IIiVhaPuq qJtdELRymjqW2M9FZHQfdv36ndqHkxW2V6jfcrODFNy17yQFkjUMht4+4f1MhEhPEMH6 RsFhGHv/4pu6XCHbFrA459pk5ayJs3HN2Lyr6tQzkv4enNQFn2c5ezg55G/EDOXa7MQ5 E392wi5YhEAKInMAGQGWHJKLgscuU7qjUyioad0cBwDti/uc/586g0axRzUtkPh5c5rm 8Zkw== X-Gm-Message-State: AOAM531+kdC1hr4XP18MGZ9sNE0VMbTOhyOdhEMQIpSMDTQPWWfIkMz4 axtaNe7adOSgpSWfVdAyLTWCSerr/ctxQg== X-Google-Smtp-Source: ABdhPJzFqgYIn28kGwZYRHMkgMlywmAGzEj1R/bU5FgHdvCMwOGngDUFUKXa//tGGnTWbRwRYwCJ0w== X-Received: by 2002:a7b:c8cd:0:b0:38e:c2c1:520a with SMTP id f13-20020a7bc8cd000000b0038ec2c1520amr284126wml.139.1649880142840; Wed, 13 Apr 2022 13:02:22 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:22 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 23/27] revisions API: release "reflog_info" in release revisions() Date: Wed, 13 Apr 2022 22:01:52 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Add a missing reflog_walk_info_release() to "reflog-walk.c" and use it in release_revisions(). Signed-off-by: Ævar Arnfjörð Bjarmason --- reflog-walk.c | 24 +++++++++++++++++++++++- reflog-walk.h | 1 + revision.c | 1 + t/t0100-previous.sh | 1 + t/t1401-symbolic-ref.sh | 2 ++ t/t1411-reflog-show.sh | 1 + t/t1412-reflog-loop.sh | 2 ++ t/t1415-worktree-refs.sh | 1 + 8 files changed, 32 insertions(+), 1 deletion(-) diff --git a/reflog-walk.c b/reflog-walk.c index 8ac4b284b6b..7aa6595a51f 100644 --- a/reflog-walk.c +++ b/reflog-walk.c @@ -8,7 +8,7 @@ struct complete_reflogs { char *ref; - const char *short_ref; + char *short_ref; struct reflog_info { struct object_id ooid, noid; char *email; @@ -51,9 +51,16 @@ static void free_complete_reflog(struct complete_reflogs *array) } free(array->items); free(array->ref); + free(array->short_ref); free(array); } +static void complete_reflogs_clear(void *util, const char *str) +{ + struct complete_reflogs *array = util; + free_complete_reflog(array); +} + static struct complete_reflogs *read_complete_reflog(const char *ref) { struct complete_reflogs *reflogs = @@ -116,6 +123,21 @@ void init_reflog_walk(struct reflog_walk_info **info) (*info)->complete_reflogs.strdup_strings = 1; } +void reflog_walk_info_release(struct reflog_walk_info *info) +{ + size_t i; + + if (!info) + return; + + for (i = 0; i < info->nr; i++) + free(info->logs[i]); + string_list_clear_func(&info->complete_reflogs, + complete_reflogs_clear); + free(info->logs); + free(info); +} + int add_reflog_for_walk(struct reflog_walk_info *info, struct commit *commit, const char *name) { diff --git a/reflog-walk.h b/reflog-walk.h index e9e00ffd479..8076f10d9fb 100644 --- a/reflog-walk.h +++ b/reflog-walk.h @@ -8,6 +8,7 @@ struct reflog_walk_info; struct date_mode; void init_reflog_walk(struct reflog_walk_info **info); +void reflog_walk_info_release(struct reflog_walk_info *info); int add_reflog_for_walk(struct reflog_walk_info *info, struct commit *commit, const char *name); void show_reflog_message(struct reflog_walk_info *info, int, diff --git a/revision.c b/revision.c index 5aa6dec4532..8cd849aa2b9 100644 --- a/revision.c +++ b/revision.c @@ -2953,6 +2953,7 @@ void release_revisions(struct rev_info *revs) clear_pathspec(&revs->prune_data); release_revisions_mailmap(revs->mailmap); free_grep_patterns(&revs->grep_filter); + reflog_walk_info_release(revs->reflog_info); } static void add_child(struct rev_info *revs, struct commit *parent, struct commit *child) diff --git a/t/t0100-previous.sh b/t/t0100-previous.sh index 69beb59f627..a16cc3d2983 100755 --- a/t/t0100-previous.sh +++ b/t/t0100-previous.sh @@ -5,6 +5,7 @@ test_description='previous branch syntax @{-n}' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'branch -d @{-1}' ' diff --git a/t/t1401-symbolic-ref.sh b/t/t1401-symbolic-ref.sh index 132a1b885ac..9fb0b90f252 100755 --- a/t/t1401-symbolic-ref.sh +++ b/t/t1401-symbolic-ref.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='basic symbolic-ref tests' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh # If the tests munging HEAD fail, they can break detection of diff --git a/t/t1411-reflog-show.sh b/t/t1411-reflog-show.sh index 975c4ea83a8..da581ec19ac 100755 --- a/t/t1411-reflog-show.sh +++ b/t/t1411-reflog-show.sh @@ -4,6 +4,7 @@ test_description='Test reflog display routines' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup' ' diff --git a/t/t1412-reflog-loop.sh b/t/t1412-reflog-loop.sh index 977603f7f1c..ff30874f940 100755 --- a/t/t1412-reflog-loop.sh +++ b/t/t1412-reflog-loop.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='reflog walk shows repeated commits again' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup commits' ' diff --git a/t/t1415-worktree-refs.sh b/t/t1415-worktree-refs.sh index a3e6ea08088..3b531842dd4 100755 --- a/t/t1415-worktree-refs.sh +++ b/t/t1415-worktree-refs.sh @@ -2,6 +2,7 @@ test_description='per-worktree refs' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success 'setup' ' From patchwork Wed Apr 13 20:01:53 2022 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: 12812614 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2B717C433FE for ; Wed, 13 Apr 2022 20:03:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238682AbiDMUFY (ORCPT ); Wed, 13 Apr 2022 16:05:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41526 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238640AbiDMUE7 (ORCPT ); Wed, 13 Apr 2022 16:04:59 -0400 Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [IPv6:2a00:1450:4864:20::32a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8EA3C7DA86 for ; Wed, 13 Apr 2022 13:02:25 -0700 (PDT) Received: by mail-wm1-x32a.google.com with SMTP id p189so1762913wmp.3 for ; Wed, 13 Apr 2022 13:02:25 -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=d2yQIEwRAwEivwnAQvEvNV1VKOW1ww7xFR1QNZS1anY=; b=S4KV/fMedW91pUidJDLRLCVVk2IR6Ne0HCPxoTGNdq9CneutdLYyYstUxnSBJMHtQc qmZa51lxvCtBl/p17rklEzsPDBTPi55cV32REGaPprZ5p/DuhtApQG8g//oBmzITQSjE NhgtrOZI0bJhiS1ueUi+G1ChSUXuIfwd5/LT2KgsHzDmLJN7uscHvCdSSoLttOi2WcXf dBz3a0QVWnPrAl3+HgdsJ9jPVuvvgyMLSl/va4c3+d/geMi2xEGcbGF7K8Nj332T25Zc zhxEF0oQyJSRgJAdm343/9rCS+C8QZkzI39zvyK5N+kNwb8pfTEj+2XxLFggd7bEHEDF xPaw== 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=d2yQIEwRAwEivwnAQvEvNV1VKOW1ww7xFR1QNZS1anY=; b=UP3qM7qv/e5FZsVm/wtnhcnMcJm461Q/aswg/dzhYjEgQCLMuJck4T10RHfhNBaakr KufArlRtZZ94KntYRLxg9vjSuGx2iQyfLGcbo2NXBEPZAB1F/jC1i26Mm3M6naERZTa7 MjqTndMJTeNP7az7EgZ9fOwigxdi/KlnuqsXPaSO9ohmd7w0kBAwx3KOtePK2pGIM9JC BFQ2KQJjl7ugpaFynSQ7PUJmPhfA4RjqFyI+ckhqruDmWvil7Tt5Q1+g/s0q8xbCHY4e m5/4ROZdpDO+DWkw2HBqZxGuYUGaN+wUi3BcKMbHH8MErkR0hl7Vm3f+LYr0c1fKUtxK FmRQ== X-Gm-Message-State: AOAM532ATZWQStBaE/kuhQMDSMaV7neG9PJ3Lmiw/UL8Www6wpP6wMco Tla95j2o0F/DcAmz6wr3GFD5OHoXdiAevg== X-Google-Smtp-Source: ABdhPJxa0z3SHZSTLLmYkasb/bEls06rEs/ymPb5qeOrDY4R1xwZAMDxJiEH//SEoTVRed98PRx9ug== X-Received: by 2002:a05:600c:a03:b0:37b:daff:6146 with SMTP id z3-20020a05600c0a0300b0037bdaff6146mr293485wmp.85.1649880143850; Wed, 13 Apr 2022 13:02:23 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id o4-20020a5d6484000000b002057ad822d4sm35220498wri.48.2022.04.13.13.02.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 13:02:23 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 24/27] revisions API: call diff_free(&revs->pruning) in revisions_release() Date: Wed, 13 Apr 2022 22:01:53 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Call diff_free() on the "pruning" member of "struct rev_info". Doing so makes several tests pass under SANITIZE=leak. This was also the last missing piece that allows us to remove the UNLEAK() in "cmd_diff" and "cmd_diff_index", which allows us to use those commands as a canary for general leaks in the revisions API. See [1] for further rationale, and 886e1084d78 (builtin/: add UNLEAKs, 2017-10-01) for the commit that added the UNLEAK() there. 1. https://lore.kernel.org/git/220218.861r00ib86.gmgdl@evledraar.gmail.com/ Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/diff-index.c | 1 - builtin/diff.c | 1 - revision.c | 1 + t/t1001-read-tree-m-2way.sh | 1 + t/t1002-read-tree-m-u-2way.sh | 1 + t/t2200-add-update.sh | 1 + t/t4039-diff-assume-unchanged.sh | 1 + t/t4206-log-follow-harder-copies.sh | 2 ++ t/t6131-pathspec-icase.sh | 2 ++ 9 files changed, 9 insertions(+), 2 deletions(-) diff --git a/builtin/diff-index.c b/builtin/diff-index.c index 3a83183c312..7d158af6b6d 100644 --- a/builtin/diff-index.c +++ b/builtin/diff-index.c @@ -70,7 +70,6 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix) return -1; } result = run_diff_index(&rev, option); - UNLEAK(rev); result = diff_result_code(&rev.diffopt, result); release_revisions(&rev); return result; diff --git a/builtin/diff.c b/builtin/diff.c index dd48336da56..f539132ac68 100644 --- a/builtin/diff.c +++ b/builtin/diff.c @@ -594,7 +594,6 @@ int cmd_diff(int argc, const char **argv, const char *prefix) result = diff_result_code(&rev.diffopt, result); if (1 < rev.diffopt.skip_stat_unmatch) refresh_index_quietly(); - UNLEAK(rev); release_revisions(&rev); UNLEAK(ent); UNLEAK(blob); diff --git a/revision.c b/revision.c index 8cd849aa2b9..63f17c085c9 100644 --- a/revision.c +++ b/revision.c @@ -2953,6 +2953,7 @@ void release_revisions(struct rev_info *revs) clear_pathspec(&revs->prune_data); release_revisions_mailmap(revs->mailmap); free_grep_patterns(&revs->grep_filter); + diff_free(&revs->pruning); reflog_walk_info_release(revs->reflog_info); } diff --git a/t/t1001-read-tree-m-2way.sh b/t/t1001-read-tree-m-2way.sh index 0710b1fb1e9..516a6112fdc 100755 --- a/t/t1001-read-tree-m-2way.sh +++ b/t/t1001-read-tree-m-2way.sh @@ -21,6 +21,7 @@ In the test, these paths are used: yomin - not in H or M ' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh . "$TEST_DIRECTORY"/lib-read-tree.sh diff --git a/t/t1002-read-tree-m-u-2way.sh b/t/t1002-read-tree-m-u-2way.sh index 46cbd5514a6..bd5313caec9 100755 --- a/t/t1002-read-tree-m-u-2way.sh +++ b/t/t1002-read-tree-m-u-2way.sh @@ -9,6 +9,7 @@ This is identical to t1001, but uses -u to update the work tree as well. ' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh . "$TEST_DIRECTORY"/lib-read-tree.sh diff --git a/t/t2200-add-update.sh b/t/t2200-add-update.sh index 0c38f8e3569..be394f1131a 100755 --- a/t/t2200-add-update.sh +++ b/t/t2200-add-update.sh @@ -14,6 +14,7 @@ only the updates to dir/sub. Also tested are "git add -u" without limiting, and "git add -u" without contents changes, and other conditions' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh test_expect_success setup ' diff --git a/t/t4039-diff-assume-unchanged.sh b/t/t4039-diff-assume-unchanged.sh index 0eb0314a8b3..78090e6852d 100755 --- a/t/t4039-diff-assume-unchanged.sh +++ b/t/t4039-diff-assume-unchanged.sh @@ -2,6 +2,7 @@ test_description='diff with assume-unchanged entries' +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh # external diff has been tested in t4020-diff-external.sh diff --git a/t/t4206-log-follow-harder-copies.sh b/t/t4206-log-follow-harder-copies.sh index 4871a5dc92f..33ecf82c7f9 100755 --- a/t/t4206-log-follow-harder-copies.sh +++ b/t/t4206-log-follow-harder-copies.sh @@ -6,6 +6,8 @@ test_description='Test --follow should always find copies hard in git log. ' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh . "$TEST_DIRECTORY"/lib-diff.sh diff --git a/t/t6131-pathspec-icase.sh b/t/t6131-pathspec-icase.sh index 39fc3f6769b..770cce026cb 100755 --- a/t/t6131-pathspec-icase.sh +++ b/t/t6131-pathspec-icase.sh @@ -1,6 +1,8 @@ #!/bin/sh test_description='test case insensitive pathspec limiting' + +TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh if test_have_prereq CASE_INSENSITIVE_FS From patchwork Thu Apr 14 05:56:38 2022 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: 12812933 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1A457C433F5 for ; Thu, 14 Apr 2022 05:56:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239949AbiDNF7S (ORCPT ); Thu, 14 Apr 2022 01:59:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35120 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234212AbiDNF7R (ORCPT ); Thu, 14 Apr 2022 01:59:17 -0400 Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8FA5E34BBD for ; Wed, 13 Apr 2022 22:56:52 -0700 (PDT) Received: by mail-wm1-x333.google.com with SMTP id u17-20020a05600c211100b0038eaf4cdaaeso5309189wml.1 for ; Wed, 13 Apr 2022 22:56:52 -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=JH7tSyOC3TRcAvUH4rC30W5ZZTOi/7NTrfqQhPq7bcs=; b=MEZ029QjhtRuNCtZneqfzH9W7qSlGU1icyHXkfLmSXBxfJMWkBPT9sMwGkH132DT82 aKLAqsiV74Ewi7DNHZrz+AJAuTsLbJJ53S4mMJHa9uU42zz3key919gJ6jdy8msdsOge O1YM8XotzvRMAQeGqi+Xwdyx7iV4Bxdb0x3dJQxr4ZQCe+DOvPg5wCvdzRVfBDAurcxw s/dq68pKIgk/Ot2Oh+O5pfyjHaGf3YbNayWOjDWIIGbhuzeL8CV4m8XlpUaSPPbalhqn bBFMU8ZAocvcDom4+bffZN67kADSXG06n+e3meLsCPjJV9yUWZJbdJsqtap8dtmISre9 Xiwg== 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=JH7tSyOC3TRcAvUH4rC30W5ZZTOi/7NTrfqQhPq7bcs=; b=kUlw3Qy4F8sZ2woSbf1Yr3nNzE6Cu+Q6b4UtQ8C0VrzoUhqemxtRgcQnV+fKqHnQmB EY+EhgFJSVLSZRtKj4YpeNg9JCxLuHUwUHalMntUammK5k3xq6pq0slCgftBhMg+3QID 23HfjKPMMj1v+vx1UPsMMTbmUbckHQymEgVJVINveK9ufzzHos/6D4WvsAJwtgOxW+9H 8h4DjxO91ivP5DsJ8S62O8GTLNV4ZGEfrnaF5nPRxIkHVnE/JmJl6/hLyrrNCG2Sqzyv Mj1S5bFwqYw4oyNXc7OO1HCCpCURc1uy9vxd8+k4JZ7J0v1V3ZAtlJnwWQneNp3b7C2b rFqA== X-Gm-Message-State: AOAM5329I2nzPxfmtW7q+z92mqEWgRMIilPoSYHWN8dKtr5HTf/HKdqW 2I7d9q05zeaeAoAoPGc0n7WNKyc0KRCxPQ== X-Google-Smtp-Source: ABdhPJyAzfXRyILaCaSsH4ZQcbEYLRW4Mq/Zo455m2j/ndhn0YuSDuHsFmD3kVRjjJUEmVJ/I9Cifg== X-Received: by 2002:a7b:cb0d:0:b0:38e:aaf3:b08f with SMTP id u13-20020a7bcb0d000000b0038eaaf3b08fmr2009097wmj.12.1649915810701; Wed, 13 Apr 2022 22:56:50 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id l2-20020a05600c4f0200b0038e8fb63293sm960453wmq.22.2022.04.13.22.56.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 22:56:50 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 25/27] revisions API: have release_revisions() release "date_mode" Date: Thu, 14 Apr 2022 07:56:38 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Extend the the release_revisions() function so that it frees the "date_mode" in the "struct ref_info". This uses the date_mode_release() function added in 974c919d36d (date API: add and use a date_mode_release(), 2022-02-16). As that commit notes "t7004-tag.sh" tests for the leaks that are being fixed here. That test now fails "only" 44 tests, instead of the 46 it failed before this change. Signed-off-by: Ævar Arnfjörð Bjarmason --- revision.c | 1 + 1 file changed, 1 insertion(+) diff --git a/revision.c b/revision.c index 63f17c085c9..307f41e8891 100644 --- a/revision.c +++ b/revision.c @@ -2951,6 +2951,7 @@ void release_revisions(struct rev_info *revs) release_revisions_cmdline(&revs->cmdline); list_objects_filter_release(&revs->filter); clear_pathspec(&revs->prune_data); + date_mode_release(&revs->date_mode); release_revisions_mailmap(revs->mailmap); free_grep_patterns(&revs->grep_filter); diff_free(&revs->pruning); From patchwork Thu Apr 14 05:56:39 2022 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: 12812934 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 61AE5C433F5 for ; Thu, 14 Apr 2022 05:57:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239953AbiDNF7X (ORCPT ); Thu, 14 Apr 2022 01:59:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35144 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234212AbiDNF7U (ORCPT ); Thu, 14 Apr 2022 01:59:20 -0400 Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 15A3034BBD for ; Wed, 13 Apr 2022 22:56:55 -0700 (PDT) Received: by mail-wr1-x433.google.com with SMTP id u3so5441049wrg.3 for ; Wed, 13 Apr 2022 22:56:55 -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=HJiNirn+4kjk8KZLleAcQP7bod9PGHDVNmpwWMZAfTI=; b=aAlImNB4dXDo3y5vAkwk1OZRROZqjM2hN4qVEAu8bNfTLGQIpE/xeS0Z5z6pN+HgF8 BhlKluui0TxBAWYgpiAme/876m30t0WblQ04xYRSsaBkI2Wg9WRfxbkb74/zdABEm/3T L50iTAtsmDYYnjPsKWGm6Eiayv16VgU/eDy6hMg9FByhOxzSbmT/FqEv1mZHWVebVn5q C1yeRRpY11PqkkVmcLOOg+iy3KNwfQq861UePZ6f2OBClKAfZk5/2hHUyN/5iWYueWGa wXUy8BXJt0ZENAZAelods3kM9swWZ5vjReGw/sEa7cwo9oX2aQeyoJCljNkXXjXlIGkQ wNeg== 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=HJiNirn+4kjk8KZLleAcQP7bod9PGHDVNmpwWMZAfTI=; b=uaa4KWdatP9e9cyyoS/gCet02RZrnowO1vlbZ10qHi8vWzdC/OMVFlVMANddr4lnoD +edvpnRcqAaguHWGWb4YzYMapx02b5mo09U2T0jO+3bUq3YsPCg/rdIlrfQ5kceBQTx4 Zh+NSU/aRcRioUVzG/w3triZVliF2DdvgIxNfbKywaQ1sIxQBYiFF56xJrrQrpDGt9Dj XKoZJy8bBciM6JhY1jsbuziu9elh0X2+g5sb7qhBF9YRdovEAfw+Uwxeif2bMqcKmktx enIlrrT8s/2efHjA42deUGTLYveJpOccnnMPAZVQNfIBBblYSu3HKweuuyeWvD7BXAmN SHQw== X-Gm-Message-State: AOAM532kFVVgQGtkka8mvXhoujEfWiEfLPQvE/WOwbtq9Sxx8ETEFfmc vNYmVHNuyhkV7JsuWuIOkFE6QszpcczZNg== X-Google-Smtp-Source: ABdhPJwrTXRXkfv5BThhBdjTnXobGUA+uwrWsd269JuxOLxiSn94jw3H0W3z9im7HURglZdODlZfgA== X-Received: by 2002:a05:6000:1d89:b0:205:e6d5:c571 with SMTP id bk9-20020a0560001d8900b00205e6d5c571mr750353wrb.594.1649915813322; Wed, 13 Apr 2022 22:56:53 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id l2-20020a05600c4f0200b0038e8fb63293sm960453wmq.22.2022.04.13.22.56.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 22:56:52 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 26/27] revisions API: have release_revisions() release "topo_walk_info" Date: Thu, 14 Apr 2022 07:56:39 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Refactor the existing reset_topo_walk() into a thin wrapper for a release_revisions_topo_walk_info() + resetting the member to "NULL", and call release_revisions_topo_walk_info() from release_revisions(). This fixes memory leaks that have been with us ever since "topo_walk_info" was added to revision.[ch] in f0d9cc4196a (revision.c: begin refactoring --topo-order logic, 2018-11-01). Due to various other leaks this makes no tests pass in their entirety, but e.g. before this running this on git.git: ./git -P log --pretty=tformat:"%P %H | %s" --parents --full-history --topo-order -3 -- README.md Would report under SANITIZE=leak: SUMMARY: LeakSanitizer: 531064 byte(s) leaked in 6 allocation(s). Now we'll free all of that memory. Signed-off-by: Ævar Arnfjörð Bjarmason --- revision.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/revision.c b/revision.c index 307f41e8891..0107ac1077a 100644 --- a/revision.c +++ b/revision.c @@ -2943,6 +2943,8 @@ static void release_revisions_mailmap(struct string_list *mailmap) free(mailmap); } +static void release_revisions_topo_walk_info(struct topo_walk_info *info); + void release_revisions(struct rev_info *revs) { free_commit_list(revs->commits); @@ -2956,6 +2958,7 @@ void release_revisions(struct rev_info *revs) free_grep_patterns(&revs->grep_filter); diff_free(&revs->pruning); reflog_walk_info_release(revs->reflog_info); + release_revisions_topo_walk_info(revs->topo_walk_info); } static void add_child(struct rev_info *revs, struct commit *parent, struct commit *child) @@ -3468,17 +3471,22 @@ static void compute_indegrees_to_depth(struct rev_info *revs, indegree_walk_step(revs); } -static void reset_topo_walk(struct rev_info *revs) +static void release_revisions_topo_walk_info(struct topo_walk_info *info) { - struct topo_walk_info *info = revs->topo_walk_info; - + if (!info) + return; clear_prio_queue(&info->explore_queue); clear_prio_queue(&info->indegree_queue); clear_prio_queue(&info->topo_queue); clear_indegree_slab(&info->indegree); clear_author_date_slab(&info->author_date); + free(info); +} - FREE_AND_NULL(revs->topo_walk_info); +static void reset_topo_walk(struct rev_info *revs) +{ + release_revisions_topo_walk_info(revs->topo_walk_info); + revs->topo_walk_info = NULL; } static void init_topo_walk(struct rev_info *revs) From patchwork Thu Apr 14 05:56:40 2022 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: 12812935 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6EA8BC433F5 for ; Thu, 14 Apr 2022 05:57:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239960AbiDNF71 (ORCPT ); Thu, 14 Apr 2022 01:59:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35146 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239950AbiDNF7U (ORCPT ); Thu, 14 Apr 2022 01:59:20 -0400 Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B04333587B for ; Wed, 13 Apr 2022 22:56:56 -0700 (PDT) Received: by mail-wr1-x436.google.com with SMTP id e21so5413143wrc.8 for ; Wed, 13 Apr 2022 22:56:56 -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=VERvneIpLZwhKtxge8sEohbxnj5Qod5AZULvHoUTJhA=; b=bChQCCTjCt32vi5UK2TAM/0cQJafYfPTPV6O0ZocJ4fDeWIPCANwPwXzU5TixVCx7Y qHKPtGqVwHE78A5fsb0dZX6FD7lTOLqoKZVwbxzV9teiy0SHIVu83vYi//DwXBBfTXeD z/KY9/0D0CTMTmA/6D97by6AQhqM4ugqDACmYyF3evfHbcJGimediBPdZZnzT63HnXkX BZuFUSEAgaznrIZ7f2BLdqOhpeT2EkuHb1wfjmzXtizkVaFfpm8SHrh2mOKe+16pXGqq nPekSnOAps9aUnYoL0ixEaNDTql5agqtjMqQOzWQsK0tfd8FM1ZNu5jcevEX5yiwxobL cdjw== 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=VERvneIpLZwhKtxge8sEohbxnj5Qod5AZULvHoUTJhA=; b=6q6VRe9S6Ewt8w0f2wuzmDn3JUeYTEtvfnZFZASf257f3Q6Q6Ysam6aaqFHVEpnZUK DZyWT1VvR1ZKQMSuwqUEvjEb3xDhVs5nHrpBNiMH30h1sZlUJoBN1uRKB1ZoN+uex7dC d3rTdsjzaE2guAZO5nSRBD6K0RHE5wnQBMBPieli7HNdjiRAMr34IlvRnN2/V66TzUb3 qggsSHBmm3WxHrEvA630PEBD6dbHNlvRgidrzCPerrJh+eSj50GYtGWZ71PndVxtRfn6 3sQM0rYXIe+fGHG4f5FrZLPjC5od9r0ggjPl1bCblTTvVmkUOnWBJycggJmP/sPN0+T7 XsIg== X-Gm-Message-State: AOAM533ad/i8iILntGlDO0i/KtHAo+VcIX9bNdmyQJg2xB2DS86OCxFo zv3R/bhY77naj1hbmCdGOnA1WbtI7PJnkQ== X-Google-Smtp-Source: ABdhPJyYKj27dPVx1kuXk3VZfoB40DWzaM91Q+RSvRUQDLwq5BLDVa65KYpi5cII+eYf5czwJH0tTw== X-Received: by 2002:a5d:658f:0:b0:207:9c0e:1364 with SMTP id q15-20020a5d658f000000b002079c0e1364mr751470wru.632.1649915815082; Wed, 13 Apr 2022 22:56:55 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id l2-20020a05600c4f0200b0038e8fb63293sm960453wmq.22.2022.04.13.22.56.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Apr 2022 22:56:54 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , =?utf-8?q?Martin_=C3=85gren?= , Elijah Newren , Derrick Stolee , "brian m . carlson" , Phillip Wood , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7AgQmphcm1hc29u?= Subject: [PATCH v6 27/27] revisions API: add a TODO for diff_free(&revs->diffopt) Date: Thu, 14 Apr 2022 07:56:40 +0200 Message-Id: X-Mailer: git-send-email 2.36.0.rc2.843.g193535c2aa7 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Add a TODO comment indicating that we should release "diffopt" in release_revisions(). In a preceding commit we started releasing the "pruning" member of the same type, but handling "diffopt" will require us to untangle the "no_free" conditions I added in e900d494dcf (diff: add an API for deferred freeing, 2021-02-11). Let's leave a TODO comment to that effect, and so that we don't forget refactor code that was changed to use release_revisions() in earlier commits to stop using the "diffopt" member after a call to release_revisions(). This works currently, but would become a logic error as soon as we started freeing "diffopt". Doing that change now doesn't harm anything, and future-proofs us against a later change to release_revisions(). Signed-off-by: Ævar Arnfjörð Bjarmason --- diff-lib.c | 4 +++- revision.c | 1 + wt-status.c | 6 ++++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/diff-lib.c b/diff-lib.c index 298265e5b54..7eb66a417aa 100644 --- a/diff-lib.c +++ b/diff-lib.c @@ -651,6 +651,7 @@ int index_differs_from(struct repository *r, { struct rev_info rev; struct setup_revision_opt opt; + unsigned has_changes; repo_init_revisions(r, &rev, NULL); memset(&opt, 0, sizeof(opt)); @@ -662,8 +663,9 @@ int index_differs_from(struct repository *r, diff_flags_or(&rev.diffopt.flags, flags); rev.diffopt.ita_invisible_in_index = ita_invisible_in_index; run_diff_index(&rev, 1); + has_changes = rev.diffopt.flags.has_changes; release_revisions(&rev); - return (rev.diffopt.flags.has_changes != 0); + return (has_changes != 0); } static struct strbuf *idiff_prefix_cb(struct diff_options *opt, void *data) diff --git a/revision.c b/revision.c index 0107ac1077a..58d6212221b 100644 --- a/revision.c +++ b/revision.c @@ -2956,6 +2956,7 @@ void release_revisions(struct rev_info *revs) date_mode_release(&revs->date_mode); release_revisions_mailmap(revs->mailmap); free_grep_patterns(&revs->grep_filter); + /* TODO (need to handle "no_free"): diff_free(&revs->diffopt) */ diff_free(&revs->pruning); reflog_walk_info_release(revs->reflog_info); release_revisions_topo_walk_info(revs->topo_walk_info); diff --git a/wt-status.c b/wt-status.c index 61e0c1022f5..102d904adcb 100644 --- a/wt-status.c +++ b/wt-status.c @@ -2545,8 +2545,9 @@ int has_unstaged_changes(struct repository *r, int ignore_submodules) rev_info.diffopt.flags.quick = 1; diff_setup_done(&rev_info.diffopt); result = run_diff_files(&rev_info, 0); + result = diff_result_code(&rev_info.diffopt, result); release_revisions(&rev_info); - return diff_result_code(&rev_info.diffopt, result); + return result; } /** @@ -2578,8 +2579,9 @@ int has_uncommitted_changes(struct repository *r, diff_setup_done(&rev_info.diffopt); result = run_diff_index(&rev_info, 1); + result = diff_result_code(&rev_info.diffopt, result); release_revisions(&rev_info); - return diff_result_code(&rev_info.diffopt, result); + return result; } /**