]> git.ipfire.org Git - thirdparty/git.git/commitdiff
sparse-index: pass string length to index_file_exists()
authorJeff Hostetler <jeffhostetler@github.com>
Fri, 2 Feb 2024 18:04:54 +0000 (18:04 +0000)
committerJunio C Hamano <gitster@pobox.com>
Fri, 2 Feb 2024 18:25:39 +0000 (10:25 -0800)
The call to index_file_exists() in the loop in expand_to_path() passes
the wrong string length.  Let's fix that.

The loop in expand_to_path() searches the name-hash for each
sub-directory prefix in the provided pathname. That is, by searching
for "dir1/" then "dir1/dir2/" then "dir1/dir2/dir3/" and so on until
it finds a cache-entry representing a sparse directory.

The code creates "strbuf path_mutable" to contain the working pathname
and modifies the buffer in-place by temporarily replacing the character
following each successive "/" with NUL for the duration of the call to
index_file_exists().

It does not update the strbuf.len during this substitution.

Pass the patched length of the prefix path instead.

Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
sparse-index.c

index affc4048f279f07eece8e3c5f15054208b65c4fe..e7908cb792c1650a40e4d72bebb027103d623936 100644 (file)
@@ -326,8 +326,9 @@ void expand_to_path(struct index_state *istate,
                replace++;
                temp = *replace;
                *replace = '\0';
+               substr_len = replace - path_mutable.buf;
                if (index_file_exists(istate, path_mutable.buf,
-                                     path_mutable.len, icase)) {
+                                     substr_len, icase)) {
                        /*
                         * We found a parent directory in the name-hash
                         * hashtable, because only sparse directory entries
@@ -340,7 +341,6 @@ void expand_to_path(struct index_state *istate,
                }
 
                *replace = temp;
-               substr_len = replace - path_mutable.buf;
        }
 
 cleanup: