diff options
author | Michael Haggerty <mhagger@alum.mit.edu> | 2018-01-24 12:14:13 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-01-24 12:55:26 -0800 |
commit | 4a14f8d093138a313070fd6a50204eda66c1f9eb (patch) | |
tree | dd2a8d461a25cc336cdcf2ce0e7f351dbdaf0a7c /refs | |
parent | 27a41841ec7f83b3b1078c400f149bc536e796a4 (diff) | |
download | git-4a14f8d093138a313070fd6a50204eda66c1f9eb.tar.gz |
find_reference_location(): make function safe for empty snapshots
This function had two problems if called for an empty snapshot (i.e.,
`snapshot->start == snapshot->eof == NULL`):
* It checked `NULL < NULL`, which is undefined by C (albeit highly
unlikely to fail in the real world).
* (Assuming the above comparison behaved as expected), it returned
NULL when `mustexist` was false, contrary to its docstring.
Change the check and fix the docstring.
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'refs')
-rw-r--r-- | refs/packed-backend.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/refs/packed-backend.c b/refs/packed-backend.c index 8beb99652f..fffface428 100644 --- a/refs/packed-backend.c +++ b/refs/packed-backend.c @@ -519,9 +519,11 @@ static int load_contents(struct snapshot *snapshot) * `refname` starts. If `mustexist` is true and the reference doesn't * exist, then return NULL. If `mustexist` is false and the reference * doesn't exist, then return the point where that reference would be - * inserted. In the latter mode, `refname` doesn't have to be a proper - * reference name; for example, one could search for "refs/replace/" - * to find the start of any replace references. + * inserted, or `snapshot->eof` (which might be NULL) if it would be + * inserted at the end of the file. In the latter mode, `refname` + * doesn't have to be a proper reference name; for example, one could + * search for "refs/replace/" to find the start of any replace + * references. * * The record is sought using a binary search, so `snapshot->buf` must * be sorted. @@ -551,7 +553,7 @@ static const char *find_reference_location(struct snapshot *snapshot, */ const char *hi = snapshot->eof; - while (lo < hi) { + while (lo != hi) { const char *mid, *rec; int cmp; |