[PATCH v2 1/7] object-file: always set OI_LOOSE when reading object info
- From
Patrick Steinhardt <ps@pks.im>
- Date
- Dec 18, 2025, 10:54 UTC
- Message-ID
- <20251218-b4-pks-odb-read-object-info-improvements-v2-1-62e3e49072bc@pks.im>
- In-Reply-To
- <20251218-b4-pks-odb-read-object-info-improvements-v2-0-62e3e49072bc@pks.im>
There are some early returns in ``odb_source_loose_read_object_info()` in cases where we don't have to open the loose object. These return paths do not set `struct object_info::whence` to `OI_LOOSE` though, so it becomes impossible for the caller to tell the format of such an object.
Nobody seems to care about this right now, but it's a bug waiting to happen. Fix this by always setting `whence` on success.
Signed-off-by: Patrick Steinhardt <ps@pks.im> --- object-file.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/object-file.c b/object-file.c index 6280e42f34..d566df427a 100644 --- a/object-file.c +++ b/object-file.c @@ -439,12 +439,23 @@ int odb_source_loose_read_object_info(struct odb_source *source, */ if (!oi || (!oi->typep && !oi->sizep && !oi->contentp)) { struct stat st; - if ((!oi || !oi->disk_sizep) && (flags & OBJECT_INFO_QUICK)) - return quick_has_loose(source->loose, oid) ? 0 : -1; + + if ((!oi || !oi->disk_sizep) && (flags & OBJECT_INFO_QUICK)) { + status = quick_has_loose(source->loose, oid) ? 0 : -1; + if (!status && oi) + oi->whence = OI_LOOSE; + return status; + } + if (stat_loose_object(source->loose, oid, &st, &path) < 0) return -1; - if (oi && oi->disk_sizep) - *oi->disk_sizep = st.st_size; + + if (oi) { + if (oi->disk_sizep) + *oi->disk_sizep = st.st_size; + oi->whence = OI_LOOSE; + } + return 0; }
-- 2.52.0.351.gbe84eed79e.dirty