git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: "git rev-parse --show-superproject-working-tree" fails with "fatal: BUG: returned path string doesn't match cwd?" if supermodule has unmerged changes of the submodule reference

From
Stefan Beller <sbeller@google.com>
Date
Sep 24, 2018, 19:15 UTC
Message-ID
<CAGZ79kZg8YLhNBoYJsB4ksbBtEMj3JvHs-qH7w930FiBDeVekQ@mail.gmail.com>
In-Reply-To
<EE3D88E4-EF86-44E2-811D-535C8F19C51A@gmail.com>
On Mon, Sep 24, 2018 at 10:59 AM Sam McKelvie <sammck@gmail.com> wrote:
Show 21 quoted lines
>
> I experienced this problem using git 2.17.1; however, from inspection of the next branch, function get_superproject_working_tree() in submodule.c has not changed in 2 years.
>
> I believe the problem is related to the fact that when a merge of the submodule reference is in progress, "git --stage —full-name <submodule-relative-path>” returns three seperate entries for the submodule (one for each stage) rather than a single entry; e.g.,
>
> $ git ls-files --stage --full-name submodule-child-test
> 160000 dbbd2766fa330fa741ea59bb38689fcc2d283ac5 1       submodule-child-test
> 160000 f174d1dbfe863a59692c3bdae730a36f2a788c51 2       submodule-child-test
> 160000 e6178f3a58b958543952e12824aa2106d560f21d 3       submodule-child-test
>
> The code in get_superproject_working_tree() uses the “-z” option on ls-files, so it expects null-byte termination between entries. However, the computation of super_sub_len:
>
>                 super_sub_len = sb.buf + sb.len - super_sub - 1;
>
> will only work when there is exactly one entry returned. If this line is changed to:
>
>                 super_sub_len = strlen(super_sub);
>
> then only the first returned entry is used, and the bug is resolved.
>
> strlen() should be safe to use here because strbuf_read ensures the result buffer is null-terminated.

This is good analysis of the issue. Thanks for writing it up! Would you also mind to send a patch fixing the problem?

I agree that using strlen should work. I do not recall why I did not use it at the time of writing it.

Thanks, Stefan

Previous: Sam McKelvie
Message 2 of 2 in “"git rev-parse --show-superproject-working-tree" fails with "fatal: BUG: returned path string doesn't match cwd?" if supermodule has unmerged changes of the submodule reference”
  1. Sam McKelvieSep 24, 2018
  2. Stefan BellerSep 24, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.