summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Haggerty <mhagger@alum.mit.edu>2018-01-24 11:14:13 (GMT)
committerJunio C Hamano <gitster@pobox.com>2018-01-24 20:55:26 (GMT)
commit4a14f8d093138a313070fd6a50204eda66c1f9eb (patch)
treedd2a8d461a25cc336cdcf2ce0e7f351dbdaf0a7c
parent27a41841ec7f83b3b1078c400f149bc536e796a4 (diff)
downloadgit-4a14f8d093138a313070fd6a50204eda66c1f9eb.zip
git-4a14f8d093138a313070fd6a50204eda66c1f9eb.tar.gz
git-4a14f8d093138a313070fd6a50204eda66c1f9eb.tar.bz2
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>
-rw-r--r--refs/packed-backend.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/refs/packed-backend.c b/refs/packed-backend.c
index 8beb996..fffface 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;