From: Junio C Hamano <gitster@pobox.com>
To: Jeff King <peff@peff.net>
Cc: git@vger.kernel.org, Derrick Stolee <derrickstolee@github.com>
Subject: Re: [PATCH 1/2] notes: clean up confusing NULL checks in init_notes()
Date: Mon, 24 Apr 2023 11:05:49 -0700 [thread overview]
Message-ID: <xmqqttx5duki.fsf@gitster.g> (raw)
In-Reply-To: <20230422135543.GA3942829@coredump.intra.peff.net> (Jeff King's message of "Sat, 22 Apr 2023 09:55:43 -0400")
Jeff King <peff@peff.net> writes:
> Coverity complains that we check whether "notes_ref" is NULL, but it was
> already implied to be non-NULL earlier in the function. And this is
> true; since b9342b3fd63 (refs: add array of ref namespaces, 2022-08-05),
> we call xstrdup(notes_ref) unconditionally, which would segfault if it
> was NULL.
>
> But that commit is actually doing the right thing. Even if NULL is
> passed into the function, we'll use default_notes_ref() as a fallback,
> which will never return NULL (it tries a few options, but its last
> resort is a string literal). Ironically, the "!notes_ref" check was
> added by the same commit that added the fallback: 709f79b0894 (Notes
> API: init_notes(): Initialize the notes tree from the given notes ref,
> 2010-02-13). So this check never did anything.
I am impressed(?) that Coverity can complain at the "_or_null" part
in xstrdup_or_null().
It all makes sense. Thanks.
> Signed-off-by: Jeff King <peff@peff.net>
> ---
> notes.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/notes.c b/notes.c
> index 45fb7f22d1..cadb435056 100644
> --- a/notes.c
> +++ b/notes.c
> @@ -1019,13 +1019,13 @@ void init_notes(struct notes_tree *t, const char *notes_ref,
> t->root = (struct int_node *) xcalloc(1, sizeof(struct int_node));
> t->first_non_note = NULL;
> t->prev_non_note = NULL;
> - t->ref = xstrdup_or_null(notes_ref);
> + t->ref = xstrdup(notes_ref);
> t->update_ref = (flags & NOTES_INIT_WRITABLE) ? t->ref : NULL;
> t->combine_notes = combine_notes;
> t->initialized = 1;
> t->dirty = 0;
>
> - if (flags & NOTES_INIT_EMPTY || !notes_ref ||
> + if (flags & NOTES_INIT_EMPTY ||
> repo_get_oid_treeish(the_repository, notes_ref, &object_oid))
> return;
> if (flags & NOTES_INIT_WRITABLE && read_ref(notes_ref, &object_oid))
next prev parent reply other threads:[~2023-04-24 18:06 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-22 13:54 [PATCH 0/2] coverity null-check fixes Jeff King
2023-04-22 13:55 ` [PATCH 1/2] notes: clean up confusing NULL checks in init_notes() Jeff King
2023-04-24 18:05 ` Junio C Hamano [this message]
2023-04-24 21:57 ` Jeff King
2023-04-22 13:56 ` [PATCH 2/2] fetch_bundle_uri(): drop pointless NULL check Jeff King
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqttx5duki.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=derrickstolee@github.com \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.