From patchwork Sat Apr 2 10:49:15 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: 12799090 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 92E0BC433F5 for ; Sat, 2 Apr 2022 10:49:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243994AbiDBKvj (ORCPT ); Sat, 2 Apr 2022 06:51:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59952 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230088AbiDBKvj (ORCPT ); Sat, 2 Apr 2022 06:51:39 -0400 Received: from mail-ej1-x62c.google.com (mail-ej1-x62c.google.com [IPv6:2a00:1450:4864:20::62c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C5E3B1403E6 for ; Sat, 2 Apr 2022 03:49:47 -0700 (PDT) Received: by mail-ej1-x62c.google.com with SMTP id qh7so695944ejb.11 for ; Sat, 02 Apr 2022 03:49:47 -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=K/ixYaUEFShIUcTGyng3YBJHseEtjibBuuiD9wmL/bw=; b=IsDe7tq+WaXCa2EgoKS0z7XpgGtS+uvkz2JK3SNo7pWaS8OdQST4Inzk5qKrs++bNk XFCcyIYdcBINRTWNjevh4sEqtjWEqLdqocQIWB+SZHRq6fDo0/ps/BcYWzJeyJpOC+td sKnerGDKFatbj1Dsk2H7p0aWuvXbE8nRQ6g/nDsnAdVsPVaySn/DRyJQdOwEIKQnbrzk PQlXO6f4xTDqxroe618Q1ZxFuYaNP4kw7eo352lFYeFhJ8wDF30TzJcDzlMFnZ285Zwx 4u0BppVzr56xHJv89kGJGld3IVQdT4s6blBNqpo5qBfwb3WBvfoxv2LVVREINrDwTZ// N6Qw== 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=K/ixYaUEFShIUcTGyng3YBJHseEtjibBuuiD9wmL/bw=; b=canYJ57GuTQXAlrndJC3o6hSg4SXtwJDZvid3qzy54fR6Wo9lDkLi3Izm/ZhjbkDYX GpUYQZY8gJmEqhK5NKpwqpTurZLsNx8H63sr2rFj+6y41va8ZRd7uBx56/rAXZ2JRaLP UJp+GpLUmYt6D52RWNt8eCbGAiHSWMp2lhKx/lbgmfYMlNH5YgWx8Wy47aZPV3KmBsyt 3KU8Nw6/cQcpDWrOpWtYQu3qxqZHo+yDxBSSpBMXTUbSVijP3SiOdVgy6GWi900bev8a gSyVBIoXzSiXl8ZEczVAiEYQq4VhCgF7CRmJsKJCN5TkIdoG4/ZiWQfCFiv7vGBgYIrB uWNw== X-Gm-Message-State: AOAM532s2LZSa6hMfOFzhtSJu3Gq2RR10PteGXio24oq2jz03m+tmGBh 3bAib2pUtCcPw+Lcf6tDpqNsBV+pHvejiQ== X-Google-Smtp-Source: ABdhPJykLpGQhN8Whw86sdnb7KZfUV0DdCzPWQOmfwHxYtOfGNhm/BPakpqmRPZG0r8jrbECcZE6iw== X-Received: by 2002:a17:907:980d:b0:6d6:f910:513a with SMTP id ji13-20020a170907980d00b006d6f910513amr3157072ejc.643.1648896586111; Sat, 02 Apr 2022 03:49:46 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.49.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:49:45 -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 v5 01/27] t/helper/test-fast-rebase.c: don't leak "struct strbuf" Date: Sat, 2 Apr 2022 12:49:15 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 Sat Apr 2 10:49:16 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: 12799091 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 7B502C433EF for ; Sat, 2 Apr 2022 10:49:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354473AbiDBKvm (ORCPT ); Sat, 2 Apr 2022 06:51:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60012 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344887AbiDBKvk (ORCPT ); Sat, 2 Apr 2022 06:51:40 -0400 Received: from mail-ej1-x631.google.com (mail-ej1-x631.google.com [IPv6:2a00:1450:4864:20::631]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BFC9F1403E9 for ; Sat, 2 Apr 2022 03:49:48 -0700 (PDT) Received: by mail-ej1-x631.google.com with SMTP id dr20so10660904ejc.6 for ; Sat, 02 Apr 2022 03:49:48 -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=5hNgQZWH9j4sG11nOp+vgPhVeF0EuynGEMt/Kv8z4JA=; b=ixfT9p3uhfdHAH7dltROKJqHD8eUqr6Cun+AZYuiYyNfLVHKyd/5pNjA+vs9lkiie+ 81rG32fu/0Y8rnNR3y8e8FIw7wjleQf+4ZkVE7M1S0zVh80+MK8Gu7qdBPwSk6B/NqZt BO+MVl4YUnUF5rPbMQuiXL5A8knQU5nDAMcoXNRhKDGo2oQzz99AvagpEWZizAGr+Wll 777fWCUsHWgLSS+h5zVKXAocqlklS8Rt9bKWHACfTXitAphHMXl0SwdV5+pBZyjZuoiy 2Gafy8ytwGkQoucZXI2YpuIo1MPCk7fMC3xO+7WwIffMaMfxuMvAsadICHpFwPzqhiFh by0A== 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=5hNgQZWH9j4sG11nOp+vgPhVeF0EuynGEMt/Kv8z4JA=; b=dGMMz0jz/bM3Jee8srStDUHY8iNOFRe9xdTS+9HHXjvyTmmA5c42SDqA6HAYipBmIy 5ElUbeSv+inw4oJJVvXiuyfHGL1SCO2D7swVRS1fqz/pdluHuw2XRSYCEjFFIFza0mRy 3uMmRzSqrubO5kU3IB6Jd3inlrMggxW9QPDsyMTuXN4TwY6OHII+wjyX6SoPTodWNfmE u5/prWeFs/W12OFKOc8yHs7gVGA2quuYSVrt3eIUiKiKFRLwyjxTOmJPhywdzAoJvx14 noMXvyZEpZaOCEvFiw7FzD4mUHPwGPTjnLgJnktr5KFryakB/PKZb3xrNiNdlJXReXs0 YKzg== X-Gm-Message-State: AOAM530VwAgE/KBfnQlmA3MdZxoP4Z1VQUPkfqNx7DzpSQN73kCLf727 mcfLNgun02IEoXj7NBJqbhq84g7X+YaWAQ== X-Google-Smtp-Source: ABdhPJydnXqYZ0YxtAA1uWttFLlQNYn3dbKUfpZdNNUE4YpW904grA/u7O8qcEV3Jfo9RXV4y2+q7Q== X-Received: by 2002:a17:907:3f03:b0:6df:b04b:8712 with SMTP id hq3-20020a1709073f0300b006dfb04b8712mr3474609ejc.290.1648896587016; Sat, 02 Apr 2022 03:49:47 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.49.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:49:46 -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 v5 02/27] blame: use "goto cleanup" for cleanup_scoreboard() Date: Sat, 2 Apr 2022 12:49:16 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 Sat Apr 2 10:49:17 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: 12799093 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 B074FC433F5 for ; Sat, 2 Apr 2022 10:49:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354486AbiDBKvq (ORCPT ); Sat, 2 Apr 2022 06:51:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60104 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1353356AbiDBKvk (ORCPT ); Sat, 2 Apr 2022 06:51:40 -0400 Received: from mail-ed1-x52f.google.com (mail-ed1-x52f.google.com [IPv6:2a00:1450:4864:20::52f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 74D1B1403E6 for ; Sat, 2 Apr 2022 03:49:49 -0700 (PDT) Received: by mail-ed1-x52f.google.com with SMTP id y10so5682008edv.7 for ; Sat, 02 Apr 2022 03:49:49 -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=b519pg8kwKE9L+rwYFXR5PkvGHLbEd634aF0KUanQF0=; b=MVWNmmDhHfoenfdhkYD5KAuw3yEtmis/7aSrwxEqyDwQzZesKXf+j9/Jb0IadbIkqe a5wo6Y35dNeF3ecgzpMlNECgdKQ1YNSeKqyJuMK2zaYTXp+nVwARthmW0NZ+l+O1OZjS jDPJ2RSf9YLozeKDXjwUq6J7IIrNDpJvMZeVjZvMUWzdKGnCTniUFeiJ5qx80zRFSPxH rlnHXm6R4XLhrnVQHcQyDti0f2dFUdG+tM9D757ntAOQ8/HgMHB3+BOAXhs2DgTlTpTh nh9wimtrLcDCkINI7hUyR/qOwW5igvmFdeqigETFl4khZnRAiySr+4yXYR/WvlzXUu56 OPWA== 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=b519pg8kwKE9L+rwYFXR5PkvGHLbEd634aF0KUanQF0=; b=MGgpa5GpjaEN42ARMrYScikjTTe03B+z772YWmmaUIvXdGp9tPS2ZVDiH2rgtgSQKS JzvTmSNZv7qI3fgN5tncSlW/dwuV/4CxhJhXbN7PFdO5V7NYSEiLlMynlGsMg1BLoREN zgcXbvbF3xAu7mWK2nqXq4ytlzXfguSVtw/eJ7xEzjTuAWAJXUIzXY8XLU5zfrG9Lmlq RybLR3OWUbu+6txFVq1bNGYmRuPJ3d/Mlgm62Hx9w9pWkzOHr40zE+/2nm2ELh7JGsPv 8hOEked4C6pUQYUfZ/hqKTNboXV2/eI5Imso887cUS8AJYwHA/ppTrFSVMb9B+3CFDE/ LYLw== X-Gm-Message-State: AOAM5310zvAxFcZ+QwnpTH/7VaF4F5pkz6LfqGv2hKCXa0z4v6RNF0Gr UPRcHZ18hJv04yl00N7WrgcPAIKT76/Ouw== X-Google-Smtp-Source: ABdhPJz8YJK2cz1mY+s/8py5V+Xc+zRoiUtxcjIy8ymrIfo+cdhWJKoG8OA7wNYZZ8iwBfRpSIEzZQ== X-Received: by 2002:a50:eb8b:0:b0:419:a11c:8676 with SMTP id y11-20020a50eb8b000000b00419a11c8676mr24702577edr.267.1648896587852; Sat, 02 Apr 2022 03:49:47 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.49.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:49:47 -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 v5 03/27] string_list API users: use string_list_init_{no,}dup Date: Sat, 2 Apr 2022 12:49:17 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 Sat Apr 2 10:49:18 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: 12799094 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 48897C4332F for ; Sat, 2 Apr 2022 10:49:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354488AbiDBKvs (ORCPT ); Sat, 2 Apr 2022 06:51:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60180 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354468AbiDBKvm (ORCPT ); Sat, 2 Apr 2022 06:51:42 -0400 Received: from mail-ej1-x62c.google.com (mail-ej1-x62c.google.com [IPv6:2a00:1450:4864:20::62c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 853891403EA for ; Sat, 2 Apr 2022 03:49:50 -0700 (PDT) Received: by mail-ej1-x62c.google.com with SMTP id bh17so10681851ejb.8 for ; Sat, 02 Apr 2022 03:49:50 -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=DpY+DiBP+IhDe3vXfDBSj6K4uYXpAJu/rkWWzaGkTM4=; b=q1bWjbhdsNdy666WMjDQXPASOwuRDWsja3QijTz+k08wa7G/OdNThbcpy3UnbsWJ8q c97OvYClBgmsdvdDj5d4K2D498Vu4WNFvjF/bh5osv5qKVcFGqVgTEAvgoA+B4dG/FfF 6p3dXQgCVEQ6aluUVXDvazK1Hl4couoqnSjrBAkBd7pMwEIg3MIkXDV+cOkL/W1CAnhG WZJmH/tNpkR4vvnawmL15S5Pd3N8E7Ffd1JWNHPHJbnLEcuWaWXvaohN2FQpdYlb/E3K mRsaKWE7C3jsaxrHytFRxT88eb+UIWlh/kMzsTT7v+M4fiF9+adpJeKpiESm6AxLOz3U 3zlA== 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=DpY+DiBP+IhDe3vXfDBSj6K4uYXpAJu/rkWWzaGkTM4=; b=XKY6M3TxcrZbEIXopWvdBvjxiIyj5snAfU/nPssDtM1A0bl3Gp+DpqfUYsjPKdYcrZ nVvhxoCderAfDHxq9BhQH/Ln0l1ZBMhLrwd7BW4htG8CILrH9V4+/c4H40VLew/0wJR3 i2OlVXynQLNQqvH7j/lOBWUXw9nZdZITQ6RQvBkSKcCdrMpTLP+INsMCPs/HpcCiqLAC Nw7De4TWddJ8cfgOaMRULzw6may16aYjtGynKM4WeJpbjZ8qDPtufkxwH/bi0dwCv/o4 ccH3Ca7Zs8mR3pXbSkrCnWLcfJYu8Odc9Oo7hKNZNZQmS6dwaQpc+VSKZ9FKLqHajb2e G4Mg== X-Gm-Message-State: AOAM532Vd7+tXhbV0sDZCqHk5RUD4bOFauav26faEkISJnTNX8zlKRdD whH7H9vpMwMrmzn3cze7gUOZCZSQW1f0OQ== X-Google-Smtp-Source: ABdhPJxDO4x7csoxL1Xc2K4JDVRNQfDfhSFbv1baXgY6WmgmrauWOxDE5IwlE3wTVNsm52vVUR0gNw== X-Received: by 2002:a17:906:60d4:b0:6db:f0a8:f39e with SMTP id f20-20020a17090660d400b006dbf0a8f39emr3385714ejk.54.1648896588873; Sat, 02 Apr 2022 03:49:48 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.49.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:49:48 -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 v5 04/27] format-patch: don't leak "extra_headers" or "ref_message_ids" Date: Sat, 2 Apr 2022 12:49:18 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 Sat Apr 2 10:49:19 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: 12799095 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 5D54AC433EF for ; Sat, 2 Apr 2022 10:50:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354496AbiDBKvu (ORCPT ); Sat, 2 Apr 2022 06:51:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60286 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354475AbiDBKvm (ORCPT ); Sat, 2 Apr 2022 06:51:42 -0400 Received: from mail-ed1-x52a.google.com (mail-ed1-x52a.google.com [IPv6:2a00:1450:4864:20::52a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6B2171403EB for ; Sat, 2 Apr 2022 03:49:51 -0700 (PDT) Received: by mail-ed1-x52a.google.com with SMTP id b24so5658678edu.10 for ; Sat, 02 Apr 2022 03:49:51 -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=mLGYQg3ylXDMwVJtYaP9VqtGSTKZZVpzngu+i3xfZWQ=; b=AoxRkUkggPg3xZb9WThuemgwUyE1hrm+Etpqcb9y31hJa85ij0l1xSk85jP4JLHu0r ZmaxNrgTempErm01Bs7NQYEFyaUPP7QsTIdhI3Yb1DFZEi1MfelIYOAWMf/xd3tiOBTW mW72CEKPnNCyT4ZvXiwF+QdSWFtKYSRKe9B9W1TlDfVsGV4UbKfyB4MCxsykXeIR0/P/ VMZQdFMwiS2gGwgXuqfV9GSmwDyeoDxxIoybeaGKQK4bnwq230Gs0EKxGGFPEAbcC/jB ZpEAEP+xFMD6U9El42dSfUehRwbl3Yp1lmyJtOJMBYFQllVJW5Ykswtnyijk06cEofxR ubww== 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=mLGYQg3ylXDMwVJtYaP9VqtGSTKZZVpzngu+i3xfZWQ=; b=T6m/C2xrbnx1FxF5lfylvURhKoYBPyOa7JNcQO5Um0zSosEoI3LGl11a2IWhloX51Q 1ajpCjYxtPuk60cpAGUyDwF1Pq5kXlBCareuiFk+/PT4FUkA/MaHoMIPsi5jflWdCWXV OxH5YciaN48XdtOZpW1p3qcCfcPK1iOBFKX1FARrMx6DW0hzWlMy3ZJuE2HROmhOgMc7 8KzS/5fbCk7AufCpq8AC9qx3tgZt7d+hx160xW6uepKfTi80PEtuFstmmU1mvJAkASE+ +ZN9R82Wzk5mV40VpHjKL1A7TNLQJvbyp0R4RrvhxBJz3rbt04vNG9k+T4mM4JSBexaL Oq8w== X-Gm-Message-State: AOAM531zqdnKKs/xfzSRGy62+L5o8LyG2zxfC2vtXZs3YbOiHPMR+P4w 1PNg9IY2hyZ0sFOhI+1z5kzBXYeBpnzhtQ== X-Google-Smtp-Source: ABdhPJyW4Enhsjwx0G9AgOZ023xZ8xxl/bF5u+j3mV4kaxbSetq2wW2cxkUE50QCKujLcAqhXpbmeA== X-Received: by 2002:a05:6402:5243:b0:419:4ce2:cb5c with SMTP id t3-20020a056402524300b004194ce2cb5cmr24946152edd.151.1648896589774; Sat, 02 Apr 2022 03:49:49 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.49.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:49:49 -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 v5 05/27] cocci: add and apply free_commit_list() rules Date: Sat, 2 Apr 2022 12:49:19 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 Sat Apr 2 10:49:20 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: 12799096 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 4C37CC433F5 for ; Sat, 2 Apr 2022 10:50:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354498AbiDBKvv (ORCPT ); Sat, 2 Apr 2022 06:51:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60422 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354477AbiDBKvo (ORCPT ); Sat, 2 Apr 2022 06:51:44 -0400 Received: from mail-ed1-x531.google.com (mail-ed1-x531.google.com [IPv6:2a00:1450:4864:20::531]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7ACAD1403E9 for ; Sat, 2 Apr 2022 03:49:52 -0700 (PDT) Received: by mail-ed1-x531.google.com with SMTP id s8so153273edi.1 for ; Sat, 02 Apr 2022 03:49: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=oCDDJcavfq2JcCGDtdxL3HECY+nJ6s5KWxpA/uFFn8o=; b=ORvf8+4gONLaGHLsJpuvXq2xQtZXtgadQL89Fz184+nq4RA9FzvpA/bakzbWnua1BK BqoPqRpzqbGREx+C+ixxhu1rX+5JaYER0xq/+cRZnwkSD07p2oLFr1sWHLFAjPQxv2X4 LjXW/qlRq66fhNosUQ+hL1XtXTHqPciY6fU2MK9UMRqXUOsPpR1F6sZzDcfqS9yY+84N MnHAVNlxZ0yQpqYTwvQpxd5n4HxJ/j7BNJkcljbjVDl9a959MGQEwSZUnUfgcqR0pSMY NV1opwrNhpKWTmccTeu5nTgRo+6TWxiP1gH/0vh0D7HpS8Ah0ywd7jk5TzDQGFUD3u+g 9Qqg== 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=oCDDJcavfq2JcCGDtdxL3HECY+nJ6s5KWxpA/uFFn8o=; b=cjv4MWT3ZINqXfi1otEs7O1mdZzMXmxaGjiqVgCyBs+G9HaZcIlxiHrK67IHoOObeb GnESbtgTbd8zqcdzsbwnsl5BQarFIdlgfJGlwS4R6HDjf9umENfa2zjwhEJWRFwjzJ+U V2bt8O7LC8+HyhNg36mTHOgoU8n2jwml+UY0fAEUKMDfiqfRjGvQrpjTy0mHkzDrN1y/ vPvrhEkbx2gq+qY6SsCGjaO1oy9HWiJ356onQc0v31owdBSsXsHBvJVw+Rx8GcyWWCT7 LRbnQSRtl+nkbf55cHVh1Stwd8j9C0fi57GNW0xZhLMAaPGARHRhw5bJGUVzlxMahRbC CCjA== X-Gm-Message-State: AOAM533lFoTReNH1gRd5dvr2wMJ8yf8iBUmoqc+ttzJa0iWB73I12GIN CJCwrBOvR/e5KJZd24A3ahC3n+ele4rnkw== X-Google-Smtp-Source: ABdhPJyCkmdNmkkcIb7zI8VVamHkRHVjY6MMr8ZwRBUr6txIHE50aAHsxMzSpM4g0b49xBXKIJ3MdQ== X-Received: by 2002:a05:6402:64d:b0:41c:b920:aa57 with SMTP id u13-20020a056402064d00b0041cb920aa57mr441293edx.389.1648896590697; Sat, 02 Apr 2022 03:49:50 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.49.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:49: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 v5 06/27] revision.[ch]: provide and start using a release_revisions() Date: Sat, 2 Apr 2022 12:49:20 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 Sat Apr 2 10:49:21 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: 12799097 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 3C197C433EF for ; Sat, 2 Apr 2022 10:50:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354501AbiDBKvz (ORCPT ); Sat, 2 Apr 2022 06:51:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60536 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354484AbiDBKvp (ORCPT ); Sat, 2 Apr 2022 06:51:45 -0400 Received: from mail-ej1-x62d.google.com (mail-ej1-x62d.google.com [IPv6:2a00:1450:4864:20::62d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B5A801403F8 for ; Sat, 2 Apr 2022 03:49:53 -0700 (PDT) Received: by mail-ej1-x62d.google.com with SMTP id dr20so10661167ejc.6 for ; Sat, 02 Apr 2022 03:49:53 -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=8ofq9yLa9J4cIjLNJFTSo6yMFP7a158Oazc0wKOJYHo=; b=G1O7C72GKoi09X3ieq//egHUU1BgWYYR/f5TGX5u971sMOfw0cPRqVI073CvKlwXra xbzV3BCmEp/3pM6xJgcizB76ztPkDjdd4L3Q7E8J74UWFYRmIJcanIBZCJYSJAOwtshh jZx7jsaAkF5WiEs58FwL6gcmmRR8oG03yQU1drDsfaBiibsIQY8tkmLHv6rNnuf5Oqby QMfBCFA8VkLXKymxrBPQAox1QrE9aYx0LGqPCF7qphdnqLkiWgCl2CKfmfKJgodfylnG loWnahBE9HSmzL+s1uhFa1WTT61NVpuqqa3KXwJ9+zqAMLkBXi378xKUVuETxmZ5OZI3 6uhQ== 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=8ofq9yLa9J4cIjLNJFTSo6yMFP7a158Oazc0wKOJYHo=; b=OG0RQnruT9I/PPtxSjddBUcyHL7eCfAjEy1SjDHCXvvoZSPUinBAV4K0iK2/gfnxJs 4Q3T3LdIo7iGylvNcnHp1ucwx94gYwOSbNI7u2l2LzoBNGgOW+3JJwVKqIbzbEeD5dt4 oJ/J5Y263OUQ4dJqEPd5t8nG8mTThyO4kWPd0bAlQ2NVbBboFEAOxvijEMilzl1ZSXaN bVfodJsu7KHihuZaTdhUSKLnvrc90GEq3HlLTjr6u4xESXX9PmRLou7XmVHniANqmCCd uTnaZnOGrOSoeZTl0qM93WV9qv8XL6oQsW8M1gifFv5gclblRR31HCYM0Uo++HcnQPG6 XcUQ== X-Gm-Message-State: AOAM531MluYxA4vMHwYr7t4ZLe/Yo+0u4GhbFA5GWhCNLrYALdwN8Qxa OuAOCXja7iNe9Ay0k+UF9LS88Z1DYQegxg== X-Google-Smtp-Source: ABdhPJxHxNhqunOHZYXhzDDwhjCJeiuLKBnNc7wBT5Rg0QjjVEabrl1fkQGQI2h0YMtMSyFfjiPKrA== X-Received: by 2002:a17:907:72c5:b0:6da:e99e:226c with SMTP id du5-20020a17090772c500b006dae99e226cmr3405055ejc.515.1648896591778; Sat, 02 Apr 2022 03:49:51 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.49.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:49:51 -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 v5 07/27] revisions API users: add straightforward release_revisions() Date: Sat, 2 Apr 2022 12:49:21 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 9407f835cb6..592d5d33442 100644 --- a/builtin/reflog.c +++ b/builtin/reflog.c @@ -248,6 +248,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 5301612d24b..24980863f68 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 Sat Apr 2 10:49:22 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: 12799098 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 E0CDBC433FE for ; Sat, 2 Apr 2022 10:50:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354502AbiDBKv4 (ORCPT ); Sat, 2 Apr 2022 06:51:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60620 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354483AbiDBKvq (ORCPT ); Sat, 2 Apr 2022 06:51:46 -0400 Received: from mail-ej1-x636.google.com (mail-ej1-x636.google.com [IPv6:2a00:1450:4864:20::636]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AFEED1403EB for ; Sat, 2 Apr 2022 03:49:54 -0700 (PDT) Received: by mail-ej1-x636.google.com with SMTP id k23so7240673ejd.3 for ; Sat, 02 Apr 2022 03:49:54 -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=7WHSO1SgFiZ8NDaly33F2W1SYfrScjaq8VpX7r7UtuM=; b=JouwpB8M+h3bRK31AmDTEUbfJQNd1vmKWR1GgrVoCr1kc2qRB0yETAtQ4hMYBXjm2+ CuMVG2cd4SBZzBoaVRfebjeCFkBKw/IoiExN80wIwZgL7yM7O3Odh6xFLWOmw3VcBNmQ SK33kv5BQov/0XCbegK6EBptGu49mxlL//r1SR7oPubdA0j22wb4oAngJgsPc3d7lXTc 43nJ2BxW0CWJSD59dnQhUScLcbRb/Is6tHXZDPlQoh7RveWT8+rKQkMKqRF1sqOfpsnV vXQryBLlMWruYiQRUJhSY5EMicnDIhZADYAMeIt3bi0czYs8IwhPbUtxURuR7+RYZmM0 E6Gg== 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=7WHSO1SgFiZ8NDaly33F2W1SYfrScjaq8VpX7r7UtuM=; b=BN2bb4YmQzMCChl5AtsX+GmiS7tL7mqpgvdwfSo1EVImdfz1cAJBGvNSSU6oE6mWBu K8ehFuwEkFLg4cX7RvLhpa8CKJO1LMNuZfMB9CgaBdhKzudy1QOk+9D0KigdauBYDtD6 L9vegqXbCvxbjl0xXJS0tRR4BLMGHCBrOPSMBDYfJzb+lbbMn3IKmSOzzUEFJs5jX/xi eH5PfFA3Tz2wgD/IbiqjkQXDZNbjuaLIncE6lQz+IrOqrj/8R0vyZj7/f2mLVLoVLD4/ JeNAx9BDoE25vH1dCR9jdcH4YvMvIzwNxUl/hQ1ta42S7mXUCK3zKXlfWdiYxxfcBUNC iB8Q== X-Gm-Message-State: AOAM530JY0B2lX6SdO5II7+QnBc25aTLNHLqNdYW5rz2yPywSwIBLa93 LBof4Nw+8qZkRtVGdGKIpenQRfgFws6f6Q== X-Google-Smtp-Source: ABdhPJxdW1EqOazcDF/LzDM+XbXBqy+YHGxn1EoytNfTXQrXhp9uPDQP40+BXMcfgF/8H5LqiNCYlQ== X-Received: by 2002:a17:907:7da4:b0:6e4:8a48:d779 with SMTP id oz36-20020a1709077da400b006e48a48d779mr3358905ejc.344.1648896592944; Sat, 02 Apr 2022 03:49:52 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.49.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:49: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 v5 08/27] revision.[ch]: document and move code declared around "init" Date: Sat, 2 Apr 2022 12:49:22 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 Sat Apr 2 10:49:23 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: 12799099 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 85BDFC433F5 for ; Sat, 2 Apr 2022 10:50:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354525AbiDBKwA (ORCPT ); Sat, 2 Apr 2022 06:52:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60852 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354490AbiDBKvt (ORCPT ); Sat, 2 Apr 2022 06:51:49 -0400 Received: from mail-ej1-x62f.google.com (mail-ej1-x62f.google.com [IPv6:2a00:1450:4864:20::62f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C05DB1403F8 for ; Sat, 2 Apr 2022 03:49:55 -0700 (PDT) Received: by mail-ej1-x62f.google.com with SMTP id yy13so10741936ejb.2 for ; Sat, 02 Apr 2022 03:49: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=+INmhvHjxa57pFbY+pr4oXlNQBq0GivCWgOKPmxjs9o=; b=c0jpsYC0LsBfRjXBg06Vb8ktBFMtyBU4wZk1i0+qm+zPFbWEKUhICjD0TCzYb0U9Rl +/rPkclcwNibcw07eu8VF1OymsjI1dXOFrjfQsY4WIUAinRewhnDCt3QjIdkfM3ioCk8 4kKBHkuPCxTjd3T/DRKADhLqJmcNGp302cIXgJgCkcxkkn7ocBLJL+YfvDUW25e3jct4 GdMbBg+BSY6GH2znyLIdKlGrok4G1KIHJZHRxM07aLBejT1BXlNECqutzk5ey2EJAlDl 8Fe772gHYA5fTlCuuKTeYpscHJj+Pd/zB0LOlmT00fhDq6wYus0yKvYaLDxfAGq2gzYS GXzw== 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=+INmhvHjxa57pFbY+pr4oXlNQBq0GivCWgOKPmxjs9o=; b=OCmSBSdCY0MeW289Xx+T7Zb69UEVmkvHvAAcQmUjH/3YsnAlpkRq+vj6x6523zOjxI 0qJNd98FuXTIJl1DxG0ur+ORaSLeOZoGsoyOSe2VjBhz5q2jfXuomovUOXJg3yp1JaaN xkBghxwtXnu32yt87PKEIuUjFUn5Pz93la1qysXC2OOcOqnYur8SbUdb/n+DA+GhYxbm fhsM8c2XypoOrNhbKXqq22T7JNeXPp7DRbTHhcsjkuHzFFsAlbrNq7tW3mEdPPzL3zGi xKlyUc4WnU7A8fXjY12w+oDhXNVC9L7XCWNQ1/7VkbZVWCihPOior8YGnviYACGIQyUG UY/w== X-Gm-Message-State: AOAM533/r0huYGS6MamMbOCsNTMcHtuAtIC0Qp1V2N8TMidDmUV9Af2t 6v+ZrZdEqD/MFbXLJYfHG4PP7KDzdBLEJw== X-Google-Smtp-Source: ABdhPJzTU3uRb9r7GP3mbZPtNoV4odijCZvsBuYPHJsVT81fzdBE4yfyEFszdJNAdH3EEPgdeQOrYg== X-Received: by 2002:a17:907:7d93:b0:6da:8f57:68fa with SMTP id oz19-20020a1709077d9300b006da8f5768famr3549888ejc.42.1648896593905; Sat, 02 Apr 2022 03:49:53 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.49.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:49:53 -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 v5 09/27] revisions API users: use release_revisions() needing REV_INFO_INIT Date: Sat, 2 Apr 2022 12:49:23 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 24980863f68..cda33ee4d2b 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 Sat Apr 2 10:49:24 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: 12799100 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 3EB33C433EF for ; Sat, 2 Apr 2022 10:50:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354509AbiDBKwC (ORCPT ); Sat, 2 Apr 2022 06:52:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60864 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354494AbiDBKvt (ORCPT ); Sat, 2 Apr 2022 06:51:49 -0400 Received: from mail-ej1-x62b.google.com (mail-ej1-x62b.google.com [IPv6:2a00:1450:4864:20::62b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A77CF1403EB for ; Sat, 2 Apr 2022 03:49:56 -0700 (PDT) Received: by mail-ej1-x62b.google.com with SMTP id qh7so696428ejb.11 for ; Sat, 02 Apr 2022 03:49: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=Ugr2ozj/FNQa9QaTDG4rCY1TyCG+8D0lbCbK4JjOw3U=; b=qtV9E5bldB9YGfoLN97adb+tiApFawgft7Vl/VECltNZ3TJ+9qQ2MKlIiB2w1TMke9 7teODUPO4Y9frtxLEJewiqUENxlqAYHh2HnHF0b2sG5G9LxXslbPw2RNuffHw/C35YTt isnsBJPQKHeuZI+3dUO+UFcJSB1jqgZutokivg0Cq+04c1uD5VRvNsj5V2XhNvMfQhbg A0NW6EQWCtBKftxnPIqacg3aChBR0ZrpIHcd8ZAVYqkTYXQdN2XOvoe6JRxUjV9Ej0+Z uNsx2zzxk5IoQaPtyPQKhs1j88bGiLJ4/oogdb2TOcUsaMb5lG8mzqSg26txkPz9rJSo VGPw== 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=Ugr2ozj/FNQa9QaTDG4rCY1TyCG+8D0lbCbK4JjOw3U=; b=0rY9fqatoRocw36Sq7rWHrGUyGxn6A3Ja2cnwc41GgMM/KHlkfRegIfqEh2HWNIly2 stSS2BnEKa3JNjMkZGzqBns5R+dEqAkhE1gf/lIykTxblILF/sXWBmARO4gMBiguPwPc h+Ay4ksFEzQePoMT2TEA0qanRARDGraHgJKhgd0dYYfrjzQ8lw1UEIBrhcKvZTxmr+9v pGZLo036U7p51h027hKn8FoSwYh9OGIqlUkE/Flj2k1kVRPxvRizjt3RktCIHAEvWCl7 p9OxwJbk66FzXl0/fQ68wW8ArKtVNlZWErfusp7diCw1GL0tQ6d5w7A56PwYW39s8bvf zeWg== X-Gm-Message-State: AOAM533SE5MCy0y6E3mRal6lgF57dNN6emkMsABzOn8M8fbWLCwp1kKH xf70x8O9slze/+h7YBjkyXHfyqpOhY8Pfg== X-Google-Smtp-Source: ABdhPJy0vEsRZIxbMKV99KQPqP2wG4QcIFcezOxmQAJeaTj/E6t4RTvQ5y4962s2jE00/Nk8h0hl2A== X-Received: by 2002:a17:907:9724:b0:6e0:f204:5c8c with SMTP id jg36-20020a170907972400b006e0f2045c8cmr3400708ejc.150.1648896594979; Sat, 02 Apr 2022 03:49:54 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.49.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:49: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 v5 10/27] stash: always have the owner of "stash_info" free it Date: Sat, 2 Apr 2022 12:49:24 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 Sat Apr 2 10:49:25 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: 12799101 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 B6896C433F5 for ; Sat, 2 Apr 2022 10:50:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354515AbiDBKwD (ORCPT ); Sat, 2 Apr 2022 06:52:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33592 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354483AbiDBKv6 (ORCPT ); Sat, 2 Apr 2022 06:51:58 -0400 Received: from mail-ej1-x632.google.com (mail-ej1-x632.google.com [IPv6:2a00:1450:4864:20::632]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 53AC414074D for ; Sat, 2 Apr 2022 03:49:58 -0700 (PDT) Received: by mail-ej1-x632.google.com with SMTP id ot30so781252ejb.12 for ; Sat, 02 Apr 2022 03:49:58 -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=KGikEYJGeZ9WbbaHrUTKnGPY9TifFJpZyg3/u5HVfJs=; b=ShqhjnEypX5N8tVAPw+boykGU7NCiQsQb3ya0ZvMSXY+i6O+Dtw10zzJE6RbwbMPxM rU/EL1URcZqvcsL39JCCFeEQsz0aefY1ZpDROMIIGf3K5QMc1nF7oLt321S7N4jscTco KKkKgk3eXYNkxfonV4QKmoSCzYD6Y+cGo822tUWLE4YQawuY4w4M5f4cHE8V+hhEr9nq pyqWHWZ6E2QYpEcbpeMQIHt+Jo93AMJwWWpzUM1WzxHscbWhvuPcqxQYQCrIh6SSHGaC yp+acB9J9PFZ5H2IHzCHqAAMhOkDQa19DeGNAdCsIKXklZ/Uz8shw9SHNG7XSIXbWMfG 8IKg== 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=KGikEYJGeZ9WbbaHrUTKnGPY9TifFJpZyg3/u5HVfJs=; b=I3PHDDzNVT4bvc8My+wo7XLgVD0Uqq+j0m99yOuHiWGb21Z7x38lOxJRi+C4dGtjyF IYINDzW+j3H5zZ/3GlY0u30rec6aGWdB61+n4GA69mqrl+K4zT+ixBLKWidre+QpinQi 42bv/F/rOuVEOYslmMcvQYCWLl/yuX3kJ1cFMfCdi/14/tDVuznThNr35t2vlutnoCK9 X2tJdpKDhDlEWtdHjO9lc70GLNM5vbbNSJFVR10Xg3pCTTb+votJ5GES696B6BQCzgYz HZUstKo5jHG0kySrPjimULbym27jp12uO01KEPp+d2/Gb26d0HqLy9+ut7xQBhiZJ0bT 21nw== X-Gm-Message-State: AOAM533JmVpqbvuHeedMX05etr/FMG5AJb78e1hsxy7YgvdnlVtJ1uhK P5yq1CF5On+80XxCnUjFKyN4d1WwCJMQBQ== X-Google-Smtp-Source: ABdhPJwx5qQSatGBtdkdMK9rOU6I8bW6HYOJLY51eUn3YrSojB54GxDFit9SEbzX4ufpgms9zyGu1g== X-Received: by 2002:a17:906:e208:b0:6e6:df07:ac80 with SMTP id gf8-20020a170906e20800b006e6df07ac80mr897728ejb.167.1648896595737; Sat, 02 Apr 2022 03:49:55 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.49.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:49:55 -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 v5 11/27] revisions API users: add "goto cleanup" for release_revisions() Date: Sat, 2 Apr 2022 12:49:25 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 cda33ee4d2b..1bd31c85946 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 Sat Apr 2 10:49:26 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: 12799102 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 6638DC433F5 for ; Sat, 2 Apr 2022 10:50:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354542AbiDBKwE (ORCPT ); Sat, 2 Apr 2022 06:52:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33594 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354504AbiDBKv6 (ORCPT ); Sat, 2 Apr 2022 06:51:58 -0400 Received: from mail-ej1-x635.google.com (mail-ej1-x635.google.com [IPv6:2a00:1450:4864:20::635]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 29DBE140749 for ; Sat, 2 Apr 2022 03:49:58 -0700 (PDT) Received: by mail-ej1-x635.google.com with SMTP id c10so10606454ejs.13 for ; Sat, 02 Apr 2022 03:49:58 -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=UzxF1Qg8cpRe+RvN1HFCK5YoHNkK1QJ46Kn1S7KPcfM=; b=HCl/ox/FKxr0rEtdlr1QYIydasNcspfrwkEn290vUf7K6Ly+DFthYPTQKwPxjjCQNh IhiszKJOu/UKU927kH3k36vytfH7AhU5MymR7eTurnItOybloJvuaUrJrbXPhG2IdKtT 46lfvOF11lEATNJxbEPF08caW+f3FU2Uz/HpdG46JERt1BUleLl5gEsXZ1WxAsdBApyM eaGttCdj6dKdc3Lz4K+IgSfbpPPlPqGo9p5r5+7FSJfpahXUYkHwK4KFBurqRzVFJhED oEM3lCf3i0EYqaObM7Iweou7smNDEOQ25w6xIWByb5eoAxhlXmZDwuNQF5+uYke36QLH d5fw== 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=UzxF1Qg8cpRe+RvN1HFCK5YoHNkK1QJ46Kn1S7KPcfM=; b=1c0opT8Bz79x2BVX7SXLNf1OJctAiPcrjd8W4TK0xYSo7PP5UQrT7VeDs3LODESd+T l3fI46zjlinx9hiFcQwyxAs1+aIZe+02ptSZgnMqc0H/46cExbZsbPh+JiIUzceaAYtJ L+zdfmSslLx12XaWL21XfaMUUVAuhoaeNdDX/tRRYtjrR9la/TtdqwCDRc+mtzy8uMZ7 xswt88yqm2Qbn4NBIQ/C38b0sYcgMX8784fRN23cZLtAJhwBH8wGBi6NxT9442UjU6nO 1OAB0nmdkjmCs/f3fzPVAa5m8LNhzOw70dmUYqwI7zgNrZgwxCJSNQ0UhcfDfqM02Iux Zw/Q== X-Gm-Message-State: AOAM5320xTgSyQDQ72DcMGVanrHrYvl7PZQbcqiqjCsTBXpjIouIB+L/ PEDFPj9jrmoiLSLETB112gEC1bLp8bznQA== X-Google-Smtp-Source: ABdhPJwWPexJD2gFl/nrPnpsw2w9kVTPFR0CRVfat5SI2aUGliDAr8RcJx62VH4MBlyaLhaL5CGZrQ== X-Received: by 2002:a17:906:2991:b0:6cd:ac19:ce34 with SMTP id x17-20020a170906299100b006cdac19ce34mr3415892eje.746.1648896596546; Sat, 02 Apr 2022 03:49:56 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.49.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:49:56 -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 v5 12/27] revisions API users: use release_revisions() in http-push.c Date: Sat, 2 Apr 2022 12:49:26 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 Sat Apr 2 10:49:27 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: 12799103 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 39B6CC433F5 for ; Sat, 2 Apr 2022 10:50:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354559AbiDBKwI (ORCPT ); Sat, 2 Apr 2022 06:52:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33686 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354506AbiDBKv7 (ORCPT ); Sat, 2 Apr 2022 06:51:59 -0400 Received: from mail-ed1-x530.google.com (mail-ed1-x530.google.com [IPv6:2a00:1450:4864:20::530]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 88910140763 for ; Sat, 2 Apr 2022 03:49:59 -0700 (PDT) Received: by mail-ed1-x530.google.com with SMTP id d10so893048edj.0 for ; Sat, 02 Apr 2022 03:49:59 -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=a6Th4p+AfBUYtrHL8XgyQFRFmOHPrk7V106k9ZPn7m4=; b=DdLrWS1UWCylWKe0erNttb2VDFZp6NkOSJIoUkdPsdw0c97puI7nI18Ypo3bYnMM2O I3QYC/Vu4rUK98bFCa4vOf0bNSPe3tgPN2NKjXoR0dzrS1z+5MgedJLgTavCoPnUMiI7 YkLD3d54n9PBurb5iDrN87N8/XIoRCGSpplKxU1VwepGyqWd+DWEEbJjhg1wpX7f93tK 0TTTJj3e15T2mxCYZk+ln2qQMmz0sreDB648L/iOYdkTsKVrVfkHH7C1VHuy4px7hnMy oHdb3Y9ryj3dZIv9MBmdMtPR3E+2HvNyMrdDP/07/3COHB/gvFPDXlaW9EOvkLAJceOB ifjA== 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=a6Th4p+AfBUYtrHL8XgyQFRFmOHPrk7V106k9ZPn7m4=; b=w6rqsoZcDrreYTncZmuycnA9CuLyk9YQ1sOsTsLJi9/m6AWm5pFtsU7xclzmMgHjqW LOik+lGR3l5La1IgLQE4PGHymT8FyOVmwsMgcSBJ0USRJWEzKQ7k4fcZwTU/UaB1yq9C DXnsSjxEvWN4gG6HW7hEnSnqjxWLLzk0aG2/trSIATJ2JfuwZO1YQHj8tGAIAqmwihIK R+cZccEv1AnRfIlC+ucxZiqdkV08oV8hbSUQHeggBkTkmr0vQJuIuBlRJHYGtNVfvcpb FTCQO+3xoiG7AkMFpSZgSBdg3lPqyk7iy/5pkDbq/2AEGP7bbyWu5KkfTKcpyMEeL9yl NEzw== X-Gm-Message-State: AOAM533rVK7wwgt2/GFEd1jWblCbl1HR60Vqr96PDvUv637cEPHM5Ot1 Y9ffC2lC1TCCZNOvIej9b4mKUEBIv1S0EA== X-Google-Smtp-Source: ABdhPJw42xKKN6HzuFzPWHs7RxZiNOvkplSDLOXghCVoUpo6LiqvnlaGGE0+JSHmnJirVnpi1yAAgw== X-Received: by 2002:aa7:c258:0:b0:41b:7bd5:3cb3 with SMTP id y24-20020aa7c258000000b0041b7bd53cb3mr10928330edo.385.1648896597773; Sat, 02 Apr 2022 03:49:57 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.49.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:49:57 -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 v5 13/27] revisions API users: use release_revisions() in builtin/log.c Date: Sat, 2 Apr 2022 12:49:27 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 Sat Apr 2 10:49:28 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: 12799104 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 081ABC433EF for ; Sat, 2 Apr 2022 10:50:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354490AbiDBKwK (ORCPT ); Sat, 2 Apr 2022 06:52:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33592 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354512AbiDBKv7 (ORCPT ); Sat, 2 Apr 2022 06:51:59 -0400 Received: from mail-ej1-x62b.google.com (mail-ej1-x62b.google.com [IPv6:2a00:1450:4864:20::62b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 69826140767 for ; Sat, 2 Apr 2022 03:50:00 -0700 (PDT) Received: by mail-ej1-x62b.google.com with SMTP id i27so3560392ejd.9 for ; Sat, 02 Apr 2022 03:50:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=C5L0FrsIduO7fVZcb92ii8iUNtKfOS+FYzvv3S9IkP8=; b=CT8OzeMUACTqlMbJinNEPOTLmEucW1JXNL4P6yBDYiDuDFwywfieiTAGCn1xN6Wuh9 zUEh7naSkNgVVqAEv5ldAhryly9zOwEblcFdFPc3apyrdNrJXdzjCi7BtzlmU4TQRO2m b8ig0H4SMyvifkRctPZl9ua6B2C5fQ+EOTCxKYiqVzMBytUU8t7SpkfoXJqXm6ap3+rU N/nz+OzHfILpQDWa4g/PybMyrzGu8g+gkgXkah68e6Wt2Z8ljOosNBMUtD9tGPlmCvm/ JjpJWrKDNwgJpKdgxvs/K5Ft+ED5ThF+OvcVjkf2KWx+wOXgQqpxN8Z0HrJwTXUz3qLF iR/A== 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=C5L0FrsIduO7fVZcb92ii8iUNtKfOS+FYzvv3S9IkP8=; b=3PHNaHWCceyK4eSMyX97MEIi0IaqeKAHLNfy8BcieeB5ODTbzXX6SIT8SrAN+qn/P1 +4fm2uETttWQvn3mYPZ7G35595ZwjRc56jTCgD6NoVTBdyUerxuR87Sx3rE0xd6Ds+yG 7TJ6FbsDplfm8U55LDrTgxpjtzuYW+/efukUlVzkj/zPrHmw/gmkcawpBduiUWFFARKg h33dRKUiUJFmFmLVEzrUxvCvIBAxbxnxCFCFXHqUBUq2e9IbOJgxKzCG/dShZauHoaqf 9BeqqzXBvNG+yx9wnAzBUBjZCWQiF0M/gbuSMDJcvR/Cy+ZqVlCCbiaDy2TLC7A4NMO4 pqUQ== X-Gm-Message-State: AOAM533NMQWoT6eZ+rV+jmIVopqi/XV6seeL9zStKiWgF5HMlI0B9rWW W6hGOAJ6wJU1Ojle4bDnOgDBdB02bXicFg== X-Google-Smtp-Source: ABdhPJwC+Eo0T/MIRSd0UM5oLz+gkjKsMDQM7jZIihH13wWrWuRuK7WvUQlnG6lgVqDuN4vDj1u4Mw== X-Received: by 2002:a17:906:58d2:b0:6da:b635:fbf3 with SMTP id e18-20020a17090658d200b006dab635fbf3mr3334338ejs.40.1648896598726; Sat, 02 Apr 2022 03:49:58 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.49.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:49:58 -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 v5 14/27] revisions API users: use release_revisions() with UNLEAK() Date: Sat, 2 Apr 2022 12:49:28 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 Sat Apr 2 10:49:29 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: 12799105 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 062D4C433F5 for ; Sat, 2 Apr 2022 10:50:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354521AbiDBKwN (ORCPT ); Sat, 2 Apr 2022 06:52:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33700 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354514AbiDBKv7 (ORCPT ); Sat, 2 Apr 2022 06:51:59 -0400 Received: from mail-ed1-x533.google.com (mail-ed1-x533.google.com [IPv6:2a00:1450:4864:20::533]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 63738140754 for ; Sat, 2 Apr 2022 03:50:01 -0700 (PDT) Received: by mail-ed1-x533.google.com with SMTP id y10so5682314edv.7 for ; Sat, 02 Apr 2022 03:50:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=P1sTAUu5Atuw13TSGFlVIp0Oo+YGkAJEDZ3Gigm/BVA=; b=pewyRpG2zvxdlf5ExS+r20hJyq2mlgsjFcShLvfRA6T0rWf9pFB4IzQ3mmfNLFLaZO Cl/pKq7A3yOzv4YAxciuPTUkzMsTPPpO1s3ScPGIfRn8huPvsFFjSt691g2LWN9lTNif D/eSnSaWisrcSX2HsHoNuZIWnMVKMQVjjW2GwZwi/ty7jRHX0SPqqNm6894li/zHXBIC Dqc6j6aiVO/VEhDwKHPYG3T2OBEq2MNdz3OqsSRFThuPbZ+K7IP1F4AftOxeipqtCuae 7yb0QxD6qI7DZgMMu1gUQe3+EeXtTwhmYllt+SNssQZWXgoJrETUFa2R1BBWQhf4eTw8 uTPQ== 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=P1sTAUu5Atuw13TSGFlVIp0Oo+YGkAJEDZ3Gigm/BVA=; b=QY3sPXaiT2XQ3Eoc252LUyFu2UMXkBrGihFgcRYbNQ1erlLNV4DgPI5z4OSu1y94iw ZaPQ0pE1k/QZiEw8La8wZml06HT7o2boy5vom05CmTbd1j1LH1VrjA4G0ZsEzy9utLn/ IXQzrn+hUnafwN6G5G7QC4oJfrY8CDcIMGXfBnZbDIZMDWUscR0zoWVJ9n5Rvsw/PeEA NvmHgYxKqmUF50yrD19OCq0cBePTB+dxz6vduapzmD1wM1+I4GUweQSDcg5VUuMOHGdp UPofos1ZsEDagizDwdZLF1s4bbhptHR1LyRsoCDcbBQydSWSvTGXVQF15TutvWwOOkcI olfA== X-Gm-Message-State: AOAM5335o+0mb45K9Ed5iRT1i5JJCZ0rTL6qaRJuxOXNyY54oTZzlIg+ hN9sggQ4sxgOiFcJSWGLXRmrUWfCsXH2Bw== X-Google-Smtp-Source: ABdhPJw4hZEritC2GX8Aj7cN0FvnAFJCJOKtVxS4dG0nlq45mF7PtwvA5ysDNDdRRkeE1Jg86DI1sw== X-Received: by 2002:aa7:c683:0:b0:418:f5f3:9684 with SMTP id n3-20020aa7c683000000b00418f5f39684mr24896724edq.184.1648896599644; Sat, 02 Apr 2022 03:49:59 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.49.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:49:59 -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 v5 15/27] revisions API users: use release_revisions() for "prune_data" users Date: Sat, 2 Apr 2022 12:49:29 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 Sat Apr 2 10:49: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: 12799106 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 E4F27C433EF for ; Sat, 2 Apr 2022 10:50:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354584AbiDBKwg (ORCPT ); Sat, 2 Apr 2022 06:52:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33694 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354531AbiDBKwB (ORCPT ); Sat, 2 Apr 2022 06:52:01 -0400 Received: from mail-ed1-x535.google.com (mail-ed1-x535.google.com [IPv6:2a00:1450:4864:20::535]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9E413140760 for ; Sat, 2 Apr 2022 03:50:02 -0700 (PDT) Received: by mail-ed1-x535.google.com with SMTP id z92so5646781ede.13 for ; Sat, 02 Apr 2022 03:50: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=4ezM1nLx6Oakk7WrujcCl99MGdl3LvkqNCGR3Ka2aWE=; b=RSCPmvKn2iJHJ2bWGVK9f/nQYPlWzcWNUjFSQv5XWH2ym1ul2HITuT6hqYFFwmrrVc Zi6jdkJUivSLpLPnZqggIqZPPrhoCwIaS01x/T85o9JLuk5Mb+HPvJ8X/rza+vo+649E 8GI0rlXkKeOX5Pomf4mUBhhV0QadDpBxT+QEpsmMgtAtDXcejZTeHwlP5jCxWE7GOLo6 wyi6zG0P1hfOoATDnw8J2ocqYmw0DNXAoXDJoONvZk0EmHyLjTC0PLf2UO9Vx0RgwVGR 616SPGKKLKptqkP/bgtR3kh5qlt1cvlZQ+uHljj+2m6vvcLfBE4WHjle0GDBxAsN7MX4 vqog== 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=4ezM1nLx6Oakk7WrujcCl99MGdl3LvkqNCGR3Ka2aWE=; b=PR1xfDa5mibh92sw+GqUJfiL/+nIRu34ROcskc3FDOXOAcTqq0PLTvXthdS+H9ROdW ik95JAXvgkhqDSoF7QrYDlLG+P5ltlFlCKwA2fJq6uBH8Znh1E84L+NClo9JW8KryBrT UQ7JgmUTOgS6hRPpkIG2piIngfcb7sTJwP7HqDrhOXXoBUi7SYLGNCkXm3fZQHhPXbYZ wTr67tf8m2TFWLgTsqTjGRPGGQXOv5hcVMuqUpjn61ac/pozB3sia033Vrs3nHLhnEJ3 P272BfOaK4/9qtD22/0B1Ed9iLQcxmwnt1LuX2f7e3enfvpYcnBNg99Yb0zqTcV3oo6d zjjg== X-Gm-Message-State: AOAM531OyeGlHJF62/fmAzJ5klf6VKU/LDSJv4fwkIbv+ChzfJR5Fgdj JzGE2Zoysbxo8bey9vpDuigq7CXKVsocTA== X-Google-Smtp-Source: ABdhPJy9j1W5mKkQuIsdCe2065boTjujvDTdWudP2TtYDr3hS08kROM7ONpiSbk7h29YJQkqQ2wZHg== X-Received: by 2002:a05:6402:1708:b0:41c:b3e2:c4e7 with SMTP id y8-20020a056402170800b0041cb3e2c4e7mr836598edu.197.1648896600727; Sat, 02 Apr 2022 03:50:00 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.49.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:50: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 v5 16/27] revisions API: have release_revisions() release "commits" Date: Sat, 2 Apr 2022 12:49:30 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 Sat Apr 2 10:49: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: 12799107 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 14D09C433EF for ; Sat, 2 Apr 2022 10:50:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354257AbiDBKwj (ORCPT ); Sat, 2 Apr 2022 06:52:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33886 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354537AbiDBKwB (ORCPT ); Sat, 2 Apr 2022 06:52:01 -0400 Received: from mail-ej1-x630.google.com (mail-ej1-x630.google.com [IPv6:2a00:1450:4864:20::630]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 23579141476 for ; Sat, 2 Apr 2022 03:50:03 -0700 (PDT) Received: by mail-ej1-x630.google.com with SMTP id bh17so10682562ejb.8 for ; Sat, 02 Apr 2022 03:50: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=v7o564LlKg75lm7UpolJzShMoJmEwjlBcvBk8POy7qA=; b=KbkQOG8sf7JoSb/Qz2Hnx4oEocMZWxjmYKT833T9BQO0bnhCQbsc5s6FTpQVHHGmy1 g8Sqh1wM6FswAJMQq7nfHBfRkgIj9YANj8k3QMatfPwbLYWS0C8qS1hmERcU0wPpnaQK R0lOtCWu1ljKKK5z3/ox7HoS14zjQii5yRiAdgWa/rnpNf4f1/LcPzstK0CgxACW3pOg V+NOEqInV7Rjufm3xvM6JefaquQgeNL49FHEOWaeLnD9BEOSgWQl/eg64VyGESjmwkwa 8v/Sa7bszgPHWdywF6jQ099mXGgRzLa00ry/8Y4NL1D5VLPzDmZ5zK3gKbmNbG2nyV8v Wlvw== 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=v7o564LlKg75lm7UpolJzShMoJmEwjlBcvBk8POy7qA=; b=rJiiTfoiAFoBbNl10asGL45Slz9zzJFs+zz4WyHyLHq4tRM50gZJXEH3moi8QfyTws kLoDfDuPBNNvcjBwRyL8MOP8xPjietVaDGEbfg1snmjsZMkwQQnFs82PUM0+3miTsSj+ tBg59mS2tYgR1rf2ODEoNdaTkkmKIOUmorRYSGAapDhvEhk7TnYczbWMznh0Jfeaf/Jz eM262O1dFdnRRYnG1JLRaMaYkAwG5gEMPmoqAVJDgZB+xxl9zBVKLGWI7vtKWwvSnQZX ONCPz7J/hMaTuFxTO2ItcCW1cS+RLjUB6YHoV1xVjinCAF4L9sXro7A8NUFLmsKX04y2 dESg== X-Gm-Message-State: AOAM531fqwseV46JE1SIGONyRO2m5iJ9fEObopGJ1vklghYsAgKmbSXj p9yPzu/EFnvhNZh7WDbODJda368U7z2I1w== X-Google-Smtp-Source: ABdhPJyvl6435C3srpAZg5v98e+KWpYoiFyPNnyPq+4Cm2MO87eethxUQNoJw2EgjRbbUt4QKQDCjA== X-Received: by 2002:a17:906:5d09:b0:6df:d52f:58f6 with SMTP id g9-20020a1709065d0900b006dfd52f58f6mr3460673ejt.721.1648896601696; Sat, 02 Apr 2022 03:50:01 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.50.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:50: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 v5 17/27] revisions API: have release_revisions() release "mailmap" Date: Sat, 2 Apr 2022 12:49:31 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 Sat Apr 2 10:49: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: 12799108 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 AA7F1C433EF for ; Sat, 2 Apr 2022 10:50:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1351235AbiDBKwm (ORCPT ); Sat, 2 Apr 2022 06:52:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34322 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354548AbiDBKwH (ORCPT ); Sat, 2 Apr 2022 06:52:07 -0400 Received: from mail-ej1-x633.google.com (mail-ej1-x633.google.com [IPv6:2a00:1450:4864:20::633]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C982B14147C for ; Sat, 2 Apr 2022 03:50:04 -0700 (PDT) Received: by mail-ej1-x633.google.com with SMTP id bh17so10682617ejb.8 for ; Sat, 02 Apr 2022 03:50: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=p4G5aKLuT9y1bZOyM5ASBMRFhNa9BlxwIncoxKwluHg=; b=OoJDrUvGkLMgwQfZxGv9OG7h9AFcRWQgKRZ/ybFyxIhMXurn7CIvxok3JgzSqM3fdj BBJaZA9+9VhWW2MVZNMdEm8fxpFsADJ7FrcyOlgRpnO4y2JFEGxxTWs3IyiUDEAjRbnk j/vSktyp+q/ssWg7fOnnxyRwNjfjgusd05gT+YvJ+QsDWihpXNDOXiUu35X5ffQQeabi FTuff5dznJhTS3qfLkxc7zYxxyvUVBy4JUMrs9xfy6Fsje/UvQPe288eih7qTUpIRm80 LSDnyvvytK/TCRfA1M1QEdPPKry+67VQVudYDvOnN+Emcl4ocNxBMlfw5Yp+oMI6OoIw dMFA== 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=p4G5aKLuT9y1bZOyM5ASBMRFhNa9BlxwIncoxKwluHg=; b=sfaxtEXxXZTx5bTRwnE3gLTiXSxhdFca7n2mWQbCeiCYC75fEAeWPpKLpzHfId/sYv pC3GWYXgqZb/4ca6R5PeBR98Hjdps/sp38pTTEAU4PQuTRNaanEr5vmdSgPlzfxJaJve 4nHWN0/4CMSqhNRog4rhDFbm41Pm9U2vaVMTXhxqGVHx42FuGY1zXuOMETP6gEaIElbg lHpNvpO2gW6CzEYDgUQmPG9pkAFPQGA/rE93elRNWH2zm498WI9U629OibXtfwv7ycXm MC0uoKRUUJcQ4eF0ujw8CT4F0tTFTjiAUkorFQyQddC+FYZeviYQOhBKkSF8neQF/8le wdWQ== X-Gm-Message-State: AOAM532b4WjdeoP3+WlNacTetSzzuFdDnIT7ZhXEkZanSx5rb+VQD24s SWSahxSV2xd7+kmGIRwPtnmZdBEHFL3E4g== X-Google-Smtp-Source: ABdhPJxNyuU9tLvpw2ahOF8ikrLuG9fLe5rVPpVfBSV2790dVqvTP2EsSxXKcTwu4RY6z8u8nz1D6w== X-Received: by 2002:a17:907:1c9d:b0:6e4:a223:1af2 with SMTP id nb29-20020a1709071c9d00b006e4a2231af2mr3526057ejc.102.1648896602765; Sat, 02 Apr 2022 03:50:02 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.50.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:50: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 v5 18/27] revisions API: have release_revisions() release "cmdline" Date: Sat, 2 Apr 2022 12:49:32 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 | 12 ++++++++++++ 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, 60 insertions(+) diff --git a/revision.c b/revision.c index 622f0faecc4..c81506fa22f 100644 --- a/revision.c +++ b/revision.c @@ -2926,6 +2926,17 @@ 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; + + if (!cmdline) + return; + 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 +2949,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: 12799117 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 2145EC433F5 for ; Sat, 2 Apr 2022 10:52:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354514AbiDBKyC (ORCPT ); Sat, 2 Apr 2022 06:54:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33796 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354562AbiDBKwI (ORCPT ); Sat, 2 Apr 2022 06:52:08 -0400 Received: from mail-ej1-x633.google.com (mail-ej1-x633.google.com [IPv6:2a00:1450:4864:20::633]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 137E0141D8C for ; Sat, 2 Apr 2022 03:50:05 -0700 (PDT) Received: by mail-ej1-x633.google.com with SMTP id k23so7241273ejd.3 for ; Sat, 02 Apr 2022 03:50:05 -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=327RI1ac1qsUZMgAR2gvKfjM/8O9ChtCN6OVdLTkQqw=; b=XHEUrMCsvlBux5vBPtrxvIMbns6ortSoFT0tYIgSkGMtlfzxANL1CHL0VJsmzvBAqk ZfS6NMBBX7PK+NRfDG3pRcVJG6HwXbu3su8wgqsT/Nifs9NsT4zNAYevUzNl18oAU0A/ z3qBgIpGM4gmR9UqD5SfiTU573tv80TKQf3jFFBs2XM+kdc30R3MHDFpoOLVokPibRS3 1gb8/J4CN7bcjiR2jrMRUAJE8ciCW3Px/c2MukDS7KIaKib9LYKM7jZmsX7aJxAQYS1U z7VYfoh95OfqfFVkel3W4XE6T5+ZMxfEPwzyTWT7HkrkMjK8uO1a6HeClnnNXLJaWFgY Dc6A== 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=327RI1ac1qsUZMgAR2gvKfjM/8O9ChtCN6OVdLTkQqw=; b=HUjJ7UwyZE84bYbbXLrlBE+wWzS2X+oTnp7/e4BOyUhI80TjqD0H6EeRD9WnmqX/PG Bqqz+/+9dDWebWg8Sa6ZZn53owQsZuLoEU83TLilVEEDHoq7GAcseBh6Ua1EB+AMzwuY hdGqHR6u19LqXELbb75ruY2G6zkr6k4XjJF0v21MKnnUaF/h/CNkn1rfbXvu4PaGGt38 YNK2jWO7jem5SyM8QNS4lde81+nk04csnhAvvImAWOhG5Mw/2bwno2nrP9xtwckDXPJX FcEEoD4MZ/bfi9GvVjh33d7rTvpRv3yRFtjUlya4l+EETtOryxRBN/hTKvtxcABbZvfi 8Ayg== X-Gm-Message-State: AOAM5330V8UOUw5j3KNakUjH2oF8QggYo8U6P9Uc8AeCEJg/UO07gCie aqNO7g5Tp09cMrEUlIhK7r9RqCkGgpD0MA== X-Google-Smtp-Source: ABdhPJxAF+k89KzUaBQ9B8Jich++RsHDn9s32vhg7ZMLvYI2TaR70s9In05edKHPJyIlaJaZsm7YDQ== X-Received: by 2002:a17:906:68c2:b0:6b4:9f26:c099 with SMTP id y2-20020a17090668c200b006b49f26c099mr3447883ejr.41.1648896603833; Sat, 02 Apr 2022 03:50:03 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.50.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:50: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 v5 19/27] revisions API: have release_revisions() release "filter" Date: Sat, 2 Apr 2022 12:49:33 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 c81506fa22f..2484e14d26b 100644 --- a/revision.c +++ b/revision.c @@ -2950,6 +2950,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 Sat Apr 2 10:49: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: 12799112 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 29694C433EF for ; Sat, 2 Apr 2022 10:52:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1353617AbiDBKwo (ORCPT ); Sat, 2 Apr 2022 06:52:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34374 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354564AbiDBKwI (ORCPT ); Sat, 2 Apr 2022 06:52:08 -0400 Received: from mail-ej1-x62f.google.com (mail-ej1-x62f.google.com [IPv6:2a00:1450:4864:20::62f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B194A14144B for ; Sat, 2 Apr 2022 03:50:06 -0700 (PDT) Received: by mail-ej1-x62f.google.com with SMTP id p15so10674566ejc.7 for ; Sat, 02 Apr 2022 03:50: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=XrXpQIOmFSyzGKtnFgmghoZHdpHRM6E+wH9Ng2v9LzE=; b=To/He+Svym7xdTI0/qagNLp02kBxJ/ueiWIkTVgR8xKVWZN/cExkzdEI6sDWaa6Aqb VLW/Ubaq1rVOnDLJzwTS2uLL0ecfXCOFhKyocGin2zV0O7pLj0VMgCathGaleai3s16e Ci1PPq14QDOWsaMgVmY3ceXigKh+szPXfK2FsoJ3McxW/UPon4A2xN/1pIrPLg5wpcsh qa0i/9ZzluKDH989ZSF1ZCaLgfQlL4btP/yvtOaomHMqi/arV1lkLPmX0WVESjZQb1VC 4Alo6A+klZq4878PYtxbqRZAqGjvEhMiyThpi0SHR/nl7aeP5ZCHYTfQ0hs6xAahFGbl QRwA== 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=XrXpQIOmFSyzGKtnFgmghoZHdpHRM6E+wH9Ng2v9LzE=; b=khhP/gvtO2+OVtdLZ/PQURqaPv+8+QJi6CoSq2L9DwovXx6NHqmSv0jsOO9u22afSM cIOUL7mc7mw4aBlt2cs80wgFNC6Qv6ek2f5g4ygd3n1CITBhqD+K4k8IFiqzYxlhz8nw 1PNPByOaPApDn5yYpAMzeJ3fIoak8vKf8LOpj1u3QYi8+ESuBitmbUZ/ISGUSZMulcq8 AILnfE9OjBHsPOFdOrUXdox7UCRPnYUp/YEees3vBkH3299P+fhfZgstmUy7sJOWALF9 FJrDTOWXe7+LOTSQRU2LYrOjweXMOrePDEVGqfwFm75zdbvq0e+Kv31qTuXkprEAWH8z WQtg== X-Gm-Message-State: AOAM5338sMvDc5haljGMPbO9P3cvTe8NS2tYgUwKYlBC8a7Eb8iQ7UzJ 5KG+rTx7AeRedN3XLcS3IQDxOXXcroPx5Q== X-Google-Smtp-Source: ABdhPJyj+uk6d7O54zqrWonhKqJKY5ql234DfQ69a//nEc+WAzZTQAN8bc8LqQCvF7CH3CTBChy6sw== X-Received: by 2002:a17:906:1f11:b0:685:d50e:3bf9 with SMTP id w17-20020a1709061f1100b00685d50e3bf9mr3563545ejj.275.1648896604802; Sat, 02 Apr 2022 03:50:04 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.50.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:50: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 v5 20/27] revisions API: have release_revisions() release "grep_filter" Date: Sat, 2 Apr 2022 12:49:34 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 2484e14d26b..2c23de60093 100644 --- a/revision.c +++ b/revision.c @@ -2952,6 +2952,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 Sat Apr 2 10:49: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: 12799116 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 EE23EC433EF for ; Sat, 2 Apr 2022 10:52:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350684AbiDBKx6 (ORCPT ); Sat, 2 Apr 2022 06:53:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34386 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354567AbiDBKwI (ORCPT ); Sat, 2 Apr 2022 06:52:08 -0400 Received: from mail-ej1-x631.google.com (mail-ej1-x631.google.com [IPv6:2a00:1450:4864:20::631]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9E6BD141D93 for ; Sat, 2 Apr 2022 03:50:07 -0700 (PDT) Received: by mail-ej1-x631.google.com with SMTP id k23so7241369ejd.3 for ; Sat, 02 Apr 2022 03:50: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=EQ8zO4Ds5+Pm+JZ6ih5V9HSQ2n3TlV5KpNJAgwvgJsQ=; b=f5f2gqnlv6US2mWBJdS3hGjr3ODrTDpPTfELH15mHdBk0V6RO1fmr0TWDWw1V0WJ2s KFKgGsziyPkCDtmHGi2cv4lojaFxyD7/tl6k8OvfkGywu879kuCS8o12k6XJs0dLxfxF JvffQFkOvKpa4QFmPm+haFlpBWQOSq2pQFeh3tpyBPRysSGAUR1QcqTB2n2JqpjdlB+5 OSIVHToeU2PNCRdSF/TCrgQmHtEGYXHdOqOJIRjusMLyD5V6Zl+6Yjbx/caG8wp4oBy2 Q5sk4mureNniHNLPuQOdaPUXWQIRlfVKgwzGl2pjs0al1t4WcwN9jgYyZZyaovSI70Si VIiA== 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=EQ8zO4Ds5+Pm+JZ6ih5V9HSQ2n3TlV5KpNJAgwvgJsQ=; b=ERRu5x3/JkTQina5lLzvpj3crVCjY2KibfrwvMZ50rdwsz8FjVuW47HUBZ+rsxQIgi lmYcVeXmr2FX7L08cexqTyEPy7ALD63Sn+/PaQzPLNRKYwdWudjfkwhmmp/cwOIzV6R+ 9tMvgPCRbbFlcqeF84KgAUqasa71ajf9oM2hpn18G1/1RDSDeP/LPIkmeDFL3t9NJa7c KY+aXu4kXjvwTDfb+WFb+D61AaFmpicAlHxaYajvpZ+6wMRJt7sUvFpAGt/oTrUFviEk Qu0yf9QUX4SZwWZDV+Y7uz+Rwkbty44sXllfIrhpPiDWdLLtwlKdQ+BEd1n72uwXFCJZ 7J7g== X-Gm-Message-State: AOAM5333Rh66Hh2QKbGPd2CF7aXQPg4xxm6rBX5Y3u4pvChs6NuIwuDS oyq5T62/LPbYKnoHYqphoPFU8twZl9ONcw== X-Google-Smtp-Source: ABdhPJxosu1ddFqbY5t/LbpvA4yyGmLGpo0Jt/A8vMDthnp3aucDs+FyDfMj6ddSN3HEKAjopGpU7Q== X-Received: by 2002:a17:907:1623:b0:6df:c9da:a6a8 with SMTP id hb35-20020a170907162300b006dfc9daa6a8mr3297776ejc.303.1648896605716; Sat, 02 Apr 2022 03:50:05 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.50.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:50: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 v5 21/27] revisions API: have release_revisions() release "prune_data" Date: Sat, 2 Apr 2022 12:49:35 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 2c23de60093..9fb18924cbf 100644 --- a/revision.c +++ b/revision.c @@ -2951,6 +2951,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 Sat Apr 2 10:49: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: 12799110 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 C331AC433EF for ; Sat, 2 Apr 2022 10:51:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352038AbiDBKxO (ORCPT ); Sat, 2 Apr 2022 06:53:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34410 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354517AbiDBKwJ (ORCPT ); Sat, 2 Apr 2022 06:52:09 -0400 Received: from mail-ed1-x533.google.com (mail-ed1-x533.google.com [IPv6:2a00:1450:4864:20::533]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 42594141DA7 for ; Sat, 2 Apr 2022 03:50:08 -0700 (PDT) Received: by mail-ed1-x533.google.com with SMTP id h4so5705259edr.3 for ; Sat, 02 Apr 2022 03:50: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=Fq3x08VgcV91DmqOkJyRp5kWmyDXrLuyqHHBxykuYAc=; b=Zpmmy2KKoIcxOXIUkAG6tpOtUu8EEa5t8E4z2MppmMpMw1a3MI8ApvDhO3mHj+Dx9g RlwMfJm78nMlV2qroyRr7N1jWv46jpygDVQStZCl0ry6XDyDeEn5WSMMDyD6tqQ8tVf8 JgK2fXdR8sHYApBHMUX3FAoWZzFhfLBXWX4xuevNJREuCc9X3A00fYtEqCpi+IJ3GAZJ 2uxRC6yFRjR5nnIc4BtJFv/E3mIkSZ4bydEZ7yUbbqY4BM0oDh/iCz/YCx+1mJTuBuHD 7YOHQnPPgIW3e9jNb/kOWDWV9eoydQJ3tWQMFLpQ66SwoiAsOMn3PunwowiM29todAZq /ihw== 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=Fq3x08VgcV91DmqOkJyRp5kWmyDXrLuyqHHBxykuYAc=; b=3abu91zgIO8obsneI2XBcABdGZU5uz+rglmcpL/Dqou6LdUTc0j8JBgfNcVEDcUj9X 8jZUitXmi448La7LVIL53/KCkjp2PZmr8tdYKFdIezeaQwA1JtuJpAVQKA57D4BjpW5K 7VxL8PZhm3lXI9VYw4xQU0TbMjQ12c69GsM+OeY9WbBFnJ9NMN6tF7bb3x/OgFu1nlUl BUFJDYNG9OWmvXVBJkOPqQz1qE77kapKLVcuIvZEeQt4sDIuPkWXiXkeV2pXzW92sWgu A77xT7qusLHm8Pbr7Ghl5vUl931HViifTdZMqtmfEL1Myni7CEHAbHvzE1Yb1rwXxs1x 03PA== X-Gm-Message-State: AOAM531YrL0E8W5jV2BUNTBx8hUTjHda+samt3I+ccpEumeW3x6tgiLU VKIU1bJSDvEjrxANIlOqCkwYgn6JqR062g== X-Google-Smtp-Source: ABdhPJwIyZ4uio4/NH3TmLniKcz9XDhfYI1e78JzrlsRyrI0Aftw2w1wfsqZi8rVfKMrH+JfxL/SNw== X-Received: by 2002:aa7:c881:0:b0:419:1a3d:4437 with SMTP id p1-20020aa7c881000000b004191a3d4437mr25093349eds.378.1648896606610; Sat, 02 Apr 2022 03:50:06 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.50.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:50: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 v5 22/27] revisions API: clear "boundary_commits" in release_revisions() Date: Sat, 2 Apr 2022 12:49:36 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 9fb18924cbf..40f59c441f7 100644 --- a/revision.c +++ b/revision.c @@ -2949,6 +2949,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 Sat Apr 2 10:49: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: 12799111 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 7DC28C433FE for ; Sat, 2 Apr 2022 10:51:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354793AbiDBKxR (ORCPT ); Sat, 2 Apr 2022 06:53:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33852 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354505AbiDBKwf (ORCPT ); Sat, 2 Apr 2022 06:52:35 -0400 Received: from mail-ej1-x631.google.com (mail-ej1-x631.google.com [IPv6:2a00:1450:4864:20::631]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 17FED141DAB for ; Sat, 2 Apr 2022 03:50:09 -0700 (PDT) Received: by mail-ej1-x631.google.com with SMTP id bq8so10654253ejb.10 for ; Sat, 02 Apr 2022 03:50: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=PL4iQLTBvUUJJrF5hi9w9D8A0brXgbbLowcIb8SFOk8=; b=A7XnGWGIgrhL5RtKn+D+JUf6A60BHmbMYxg63JP5IHstO/UEtryZFvLpF3MJIGSpnn IYhK1SyOHe2Nc90qqdOWAdQsJ2Kh7kn1PDkjDEEZFq5nKk0Dtz9wyL/jR1iVCHkRQ7kG d2HA1eQ0zsrwjxhP2hqf3aYxQpaX7zVx5KKfbO0rqJp0JjnkkYJKGFiFVjQd1na2ICeR ZUwH46DJ+4WVGRmj00fJw196FPgMOgMx0Y0x4L2BnjISUIRWQS9P1AI8Lynp12IeX9Ws ZjP10wuuOfO+cgusnDNWSqgQ2OVEdo8gYjUvFHQ6FDFR1/lS/kQqhjr+wf/Z1+Kum5ms hzMg== 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=PL4iQLTBvUUJJrF5hi9w9D8A0brXgbbLowcIb8SFOk8=; b=t7kUEK2L3QW3/PixvluYusE3inNgbTzOYKJpcMZ/YGqpTE2HC3bAYG75c7gkcgpI3X LJ3Oc2S685pDreswSTfhGzG4uOKozTr9tybSC5x5SCaQVzEY9v/1crWEj8gpFqTooDBr EmU38BPBoT0Ctgx69BHVjy8L3fp0M+hYnBLZC4I2GaLgGCPUFo5VKjCGDx6T0ixxKWzu 9PgtFQkIObVlDfQs1hCJMw/Ijt2wJ5ZPa5j/8NH3Ps3m4giIex+eNE0uY/8bC9iS3tbB Bfj6Wl1Wt3gnQrPaCVMSBWuRR7CS9h4pYHSJpP+UJ9BJCM+XZTFV7ehuvk+a5fMgeh9w yEXg== X-Gm-Message-State: AOAM531hs0fvUDYxV1hTm/zGXdfMyflt4rxmw3kWoiAGr7a70nQmsjAT 9vB442KNaw9LVvwykvBCfhp2RW8sMDHaMg== X-Google-Smtp-Source: ABdhPJxOwW3a2aY/szce5Mt/mmaywSPrXt+x4VYgKdy84hNaMe8joTX5uAf4VoSiNJ6luFJHglxmjw== X-Received: by 2002:a17:907:d05:b0:6e4:49ac:9b26 with SMTP id gn5-20020a1709070d0500b006e449ac9b26mr3392005ejc.133.1648896607400; Sat, 02 Apr 2022 03:50:07 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.50.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:50: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 v5 23/27] revisions API: release "reflog_info" in release revisions() Date: Sat, 2 Apr 2022 12:49:37 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 40f59c441f7..e972addd8fc 100644 --- a/revision.c +++ b/revision.c @@ -2955,6 +2955,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 0bb319b944a..3770ceffafd 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 Sat Apr 2 10:49: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: 12799113 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 2EC8FC433FE for ; Sat, 2 Apr 2022 10:52:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240361AbiDBKws (ORCPT ); Sat, 2 Apr 2022 06:52:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33704 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354573AbiDBKwf (ORCPT ); Sat, 2 Apr 2022 06:52:35 -0400 Received: from mail-ed1-x52f.google.com (mail-ed1-x52f.google.com [IPv6:2a00:1450:4864:20::52f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3916B140749 for ; Sat, 2 Apr 2022 03:50:10 -0700 (PDT) Received: by mail-ed1-x52f.google.com with SMTP id a17so5659402edm.9 for ; Sat, 02 Apr 2022 03:50: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=AnHM35yB8X/bMfdbrxf8ttWv/VeaHGM1cz+6+ojs2rE=; b=ByrSEQOkHsYh7reqIH6n+4FMr6Sa0ow4ebL3DH3/e8xhN7Ip7E6huK83OHOCozveDM FDbFfW8U7ViNZdbk84OUALcj1EZl6OyMaj9MVVaRd6eEmqhlh1Ome8Q5xqNqg3e0OZt9 N+ldJ3kMKUOBHF9chqL/IiuSjf4dWxXjJs4Upn4q+yxJjqeGGj0Sbih7SU0Yaz9zBWc8 Kp39VY7bQzo1HmSAxmPu2efnWmp4TKYnmy/a+2aL/ihG0RBHfzmaigkrwYdXGlmGSdXF eyvn73WF1A3nRH04AuyyPIyHt4siAJL1a8Ha3x7XBog1gZ4adBjGZOOweq+DgfiWQOlX TpFw== 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=AnHM35yB8X/bMfdbrxf8ttWv/VeaHGM1cz+6+ojs2rE=; b=N5Kn97aB6H1msEfsbhrbB1kVj9DILttWZD81f2jrtLaYnU5nFRQ+zoai/LrZ6FKpxH FUVzaRE58Rd7XsBB/K2/WeNfpYz7jtUbRbyj+dWdXeqY2v8nWdjg8mid2HuSuPPyrUkP ymGPM8jX/1lDeBNsuUjkxoiy0VA4eU/AVqPNpbYYTFlBT2397EL/7MbQ4TaJ9HpNnJgB JWcxicpP9qyFSVVvgV0YPB0ZKZClvsFY71gwqnjwEyGWruXJtZ7jojKQzvjoqwCzHO/+ A7gOoG3q/yAcXds3wPMMxglLMtoesI3ED1YcSBooelPSDcF9QdekegAQZrNN2EU5BGYz g3HA== X-Gm-Message-State: AOAM530yHnO7a4NwgFPpuQwS1uFnrtGueJc3kYmEHLzGInux1W3IworS dbuiheSqHGhW91gC2OR7C+BTFHK0iDhZ4w== X-Google-Smtp-Source: ABdhPJz/dWem7wxpAKmx9EeKpl6ws8tTE4v8xMbWB6hHvQayykcVktjCA+Mux6MLurfS0x7Yk+6BZA== X-Received: by 2002:a50:ec18:0:b0:419:3af:5736 with SMTP id g24-20020a50ec18000000b0041903af5736mr24806916edr.215.1648896608304; Sat, 02 Apr 2022 03:50:08 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.50.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:50: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 v5 24/27] revisions API: call diff_free(&revs->pruning) in revisions_release() Date: Sat, 2 Apr 2022 12:49:38 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 e972addd8fc..8bc777da828 100644 --- a/revision.c +++ b/revision.c @@ -2955,6 +2955,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 Sat Apr 2 10:49: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: 12799115 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 6BEABC4332F for ; Sat, 2 Apr 2022 10:52:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354589AbiDBKwv (ORCPT ); Sat, 2 Apr 2022 06:52:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36352 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354580AbiDBKwg (ORCPT ); Sat, 2 Apr 2022 06:52:36 -0400 Received: from mail-ej1-x62f.google.com (mail-ej1-x62f.google.com [IPv6:2a00:1450:4864:20::62f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0B4AC141D86 for ; Sat, 2 Apr 2022 03:50:11 -0700 (PDT) Received: by mail-ej1-x62f.google.com with SMTP id yy13so10742704ejb.2 for ; Sat, 02 Apr 2022 03:50: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=k0A4tpYlR2mITnLl3It5BKrIhMqbrVBSpv8XWkqVpoc=; b=lA94DVUX8HdaAeNNo7WzTy1+OGVOQcYXyRyAvNBN1Y7SY/38x0X3PSIXsJLfxeJvU0 HWuWMomDuFvk5RbaArSji4l+BZWOXve1xyd9mp1qjObn+uaLvm/FGGNN9HHp0L+34Qsf UC7TbQ4NfkUAxHWrql5gTkiwyFyjEszr82gHzAMhSChn3MZz9bdYbhPcUDbgFj2aD2uf 7l61XosN4YcKNL1zCJS+92/wczELhUePCZnhfdDeKyjYol39E4QfZXGi9ekpolnnd2i9 FYyRg7dMWIn3wEOc4e07bj2neFDdAif+IjiFzrmfmsFEOrGKoT8YVnWBjZQrYaAr4RM+ kxPw== 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=k0A4tpYlR2mITnLl3It5BKrIhMqbrVBSpv8XWkqVpoc=; b=SpWGSzidLfRkBogQ9ZJzQ0fuIDvfDD9/Vbs/XyZh1kGP9YhuRR84YmxKyCOU/p+YEs SJDdoycRHujTk7bRKy+eqQqpJ/MxNd6YaK/zymDhL6JIAWyvOQbCfCG2cPfleHNcJnbI BKF5cXdMICMglF38sC/Wj+8dA+OtBgcZS/5wY7/c5TlWoxOMBAyWN+KVHmhoh8oUyCnE U2cOkHAdpqhbp0IhnPfmX9hfY5Hz5ReqwwJQVP1A6enaCy+7+fQPH43KBRN1aRu/E0/B LWYny20+SDB4Whi1QkkOt5yqA9bg7fpX7+TwP2dAP1ZArReLVx23BzMTVDJUbOLOt5q9 EMgw== X-Gm-Message-State: AOAM532Odh5OEX2ZFHljzxc7Dz4KgZxAZWGRpvPUxEdd2WZxaJsr96Qt FgKt9o8t2wM/i4+KVEsqAUG5AiB9gblKBw== X-Google-Smtp-Source: ABdhPJwoC8QGeig4PkBV9fRRLNNQ0cdWNuzWUHJG1mtAl8dP0sxEhKPr8jzr4VIeqFB1NT8qnOT7MQ== X-Received: by 2002:a17:907:3f8c:b0:6e0:6970:dc87 with SMTP id hr12-20020a1709073f8c00b006e06970dc87mr3368156ejc.236.1648896609347; Sat, 02 Apr 2022 03:50:09 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.50.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:50: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 v5 25/27] revisions API: have release_revisions() release "date_mode" Date: Sat, 2 Apr 2022 12:49:39 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 8bc777da828..ef98e4711f3 100644 --- a/revision.c +++ b/revision.c @@ -2953,6 +2953,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 Sat Apr 2 10:49: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: 12799114 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 812E7C433F5 for ; Sat, 2 Apr 2022 10:52:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354685AbiDBKwx (ORCPT ); Sat, 2 Apr 2022 06:52:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33710 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354593AbiDBKwh (ORCPT ); Sat, 2 Apr 2022 06:52:37 -0400 Received: from mail-ej1-x62a.google.com (mail-ej1-x62a.google.com [IPv6:2a00:1450:4864:20::62a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 25B22141DBA for ; Sat, 2 Apr 2022 03:50:12 -0700 (PDT) Received: by mail-ej1-x62a.google.com with SMTP id k23so7241566ejd.3 for ; Sat, 02 Apr 2022 03:50: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=cHbNYT/Tg0aFEhjitPVXF/Yje193NZpwKF5mWwtG554=; b=PmG4wfdTFzZLI+dXAhMNfx3R27SwHIv3c36ILUm9wZs6vMQ5Y0dVTTdupGlgCHOEYE D1kKzSz6cUxN5pujj2zPDRJAkk0hYtOnh88C5i5rAeU21Icf4Gp94Vzr6viym2IK+mK/ fNfdqwSCKXVKICbZ8pYgf63TTLZSPhiTuejk3ptzC9S2wEdB32eLIuXXO2zZMVC5ZlKe 1aiYxBii2hxgP3IjlSg2rXnm0B1FdfpCu8NjOOxY32Q4fGlSSfHe/6wSNH0fc1hwsJ7S aq1rrZGEPoryJZ/Fq+d+91CMQyVMtd80+HHNpF5z+4d6dRbT4uTdTQ+OE02Fu45s1acy pI+A== 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=cHbNYT/Tg0aFEhjitPVXF/Yje193NZpwKF5mWwtG554=; b=mMMo+89hSbDtpEm4zK9708l6qqKdBXqaqxR9y9yJ10G0+w/POVfdSDHmTdwvqrdE7p 7/mz6DRlyZn2m6FeeNZfhdMDUUuEhDo2/tvGL5Xc5kJEPN+llPr3aLOgVp2eUhHeaOe6 gtii4rcAdy6yKBUkpXCCOoJQMyYamOGURkE3/J9T72NET+UY08FEOblujU+IN0wYLvw/ wNqOy9LzKb/40YCIpVb/vKDNO9InkyTcAkvUmfnl7vOU4RmFsLgxdFQuMjLNsZvcSa0A HBI4seFAJvp19zhQYbx7yO58wbUsxRVQH5vwWM26AcNVp+x+zLH1RrmMn5PmdTHt6Blc 0syA== X-Gm-Message-State: AOAM531ZJPTGL33KA0buZj7FHPGzjm0xwjpbqJmgDXmSFUUTHqbpAwjS ZmTBU8M/5jOFQcA58nXQOXZ78knfLNl+CQ== X-Google-Smtp-Source: ABdhPJwgWpxfPkFqkWzuzp/TnFI4R8g/HtFR5btBiUd8BYHFkB36zVg7dObYLPNUPQL3ETRnEUWVaQ== X-Received: by 2002:a17:907:9693:b0:6e4:1968:8cc6 with SMTP id hd19-20020a170907969300b006e419688cc6mr3377162ejc.59.1648896610354; Sat, 02 Apr 2022 03:50:10 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.50.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:50: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 v5 26/27] revisions API: have release_revisions() release "topo_walk_info" Date: Sat, 2 Apr 2022 12:49:40 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 ef98e4711f3..28c3c3ff9b4 100644 --- a/revision.c +++ b/revision.c @@ -2945,6 +2945,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); @@ -2958,6 +2960,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) @@ -3470,17 +3473,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 Sat Apr 2 10:49: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: 12799109 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 663CFC433F5 for ; Sat, 2 Apr 2022 10:51:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354724AbiDBKwz (ORCPT ); Sat, 2 Apr 2022 06:52:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33720 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354592AbiDBKwh (ORCPT ); Sat, 2 Apr 2022 06:52:37 -0400 Received: from mail-ed1-x52b.google.com (mail-ed1-x52b.google.com [IPv6:2a00:1450:4864:20::52b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 03B98141D8F for ; Sat, 2 Apr 2022 03:50:13 -0700 (PDT) Received: by mail-ed1-x52b.google.com with SMTP id u26so5645244eda.12 for ; Sat, 02 Apr 2022 03:50: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=sFIt85kmYnkDXzfebX0SbmisLvN8wznrd7mU8m0hAFw=; b=HadnxJMTk7xBCHpcMOgLn8+l5QpuwrVQWDpWDTChV22o3QEqAag9R0Q1E8HMuhoRik L8kX0x1FYej5hFRiOSuwULmWYvHGWs+IWwiwwyJ6yRyaKGO1WRMOdu2IUki/PjQ7827R S524fiBVKti+Bj0poLNtTo+CujN2ysSQhA6jAS+32GPcqwmEKoMeonnmR2sNoQJQcvL3 bCd4qn1pm4vCk58VTj+Q4hG7lzkBiExQhAgJR59OMK2QAosrdd59iGiKb84Xgzmkna/e BmUBhMqB2Xzc0+U/rDPnXVVVfDGEgm+QPJiQHDjAm8NiB0hODbuYzukHFfY8dMz2CvyG 20/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=sFIt85kmYnkDXzfebX0SbmisLvN8wznrd7mU8m0hAFw=; b=PV2dpVUOTB0lvGgBvaxSgQwp6L491bkIiqbvWcI25xsONuQMZ+qA31OoAwBawISHnL j72P9PFRYb2KIFdX6LKJAiWXWeC4A6h1XfX+tIESPjHWf19gM52Dv91zgXwsomQjCL9G 94du8yM2ZKW7joQBTV4YIPzq9V8fhNSleRIGkE65YbSJwrJoL3dD6RPQMbmzpLMfyJzK UpjrC3jBtclTDJeEeT78eA/jPL0DJFaxwVUtENXl0MRepNMUI41oKcm12CFgA9o3EAms HCCfoWfwuMMzFYw8KmNeTHk5baMdf0zml8f/TBZeeRUWFl5nMROoqAQyY62A1eXmNoLp R03Q== X-Gm-Message-State: AOAM5306GAdDaVDgke2Zqljxf4iuOa55WVZeTS7tkr+gApJXVhlnsWrE 0vDM5kcaGDTpDRAFSCUk3nN8pOQwMdJmZg== X-Google-Smtp-Source: ABdhPJxOKijtIOwRF+7qp9pIp1I4+AhzlGMdWKmsIjaGSVqDjVQKGlUEUUgVOT1+aa9jEok4vQffGA== X-Received: by 2002:a05:6402:26c8:b0:419:2e54:9262 with SMTP id x8-20020a05640226c800b004192e549262mr24532709edd.61.1648896611371; Sat, 02 Apr 2022 03:50:11 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id r23-20020a056402235700b00419171bc571sm2366137eda.59.2022.04.02.03.50.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Apr 2022 03:50: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 v5 27/27] revisions API: add a TODO for diff_free(&revs->diffopt) Date: Sat, 2 Apr 2022 12:49:41 +0200 Message-Id: X-Mailer: git-send-email 2.35.1.1584.g2aeb20a6519 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 28c3c3ff9b4..812bf709bc3 100644 --- a/revision.c +++ b/revision.c @@ -2958,6 +2958,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; } /**