Re: [PATCH v6 08/22] object-file.c: don't set "typep" when returning non-zero
From: Jeff King <hidden>
Date: 2021-09-16 21:56:41
On Thu, Sep 16, 2021 at 05:29:30PM -0400, Taylor Blau wrote:
On Tue, Sep 07, 2021 at 12:58:03PM +0200, Ævar Arnfjörð Bjarmason wrote:quoted
When the loose_object_info() function returns an error stop faking up the "oi->typep" to OBJ_BAD. Let the return value of the function itself suffice. This code cleanup simplifies subsequent changes.The obvious danger (which you mention) is that somebody is relying on what typep points to, and is reading it even if we returned non-zero from whatever called this function. Hopefully nobody is, but this change makes me a little uncomfortable nonetheless, since there are so many potential callers (even though this function has only one caller, it doesn't take long before the number of indirect callers explodes). So it would be nice if we could do without it, but you claim that it simplifies changes that happen later on. So let's continue to see if we really do need it...
I'm actually reasonable comfortable with this patch. If we return an error from the *_object_info() functions, then I think all bets are off on what is in the resulting object_info struct. E.g., we'd already leave sizep uninitialized in such a case. It feels like oi->typep may be a little bit special because we conflate "error" and "type" in the return from oid_object_info(). But oid_object_info_extended() does not do that, and the innards of oid_object_info() do the right thing. Of course we _have_ been setting typep in this way for a while, so it's worth making sure nobody is depending on. Notably packed_object_info() does not behave in this way; if it hits an error, typep may be left unset. So any oid_object_info_extended() callers depending on this were already potentially buggy. I'd be OK with a quick sweep of the hits of "git grep typep" here. I just did that, and all the sites look pretty reasonable (they call oid_object_info_extended() and bail as soon as they see that it fails). -Peff