Re: Bug - remote.c:236: hashmap_put overwrote entry after hashmap_get returned NULL

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, May 19, 2022 at 08:23:25AM +0200, Ing. Martin Prantl Ph.D. wrote:

> file:.git/config    branch..remote=origin
> file:.git/config    branch..merge=refs/heads/
> [...]
> 
> git ls-remote
> BUG: remote.c:236: hashmap_put overwrote entry after hashmap_get returned NULL

Those branch entries with an empty subsection are the culprit. I'm not
sure how they got there, but they should be safe to remove, which will
make your immediate problem go away.

It looks like handling of such bogus keys regressed in 4a2dcb1a08
(remote: die if branch is not found in repository, 2021-11-17). In
make_branch(), the call to find_branch() gets confused by the 0-length
"len" parameter, and instead uses strlen() on the partial string
containing the rest of the config key. So it tries to look up branch
".remote" for the first key, and ".merge" for the second. Since neither
exist, in both cases it then tries to add a new entry, but this time
correctly using the 0-length string. Which will confusingly already be
present when handling the second key.

Either find_branch() needs to become more careful about distinguishing
the two cases, or perhaps 0-length names should be rejected earlier (I
don't think they could ever be useful).

Perhaps something like this, though I'll leave it to the original author
(cc'd) to decide what's best.

diff --git a/remote.c b/remote.c
index 42a4e7106e..2f000a6416 100644
--- a/remote.c
+++ b/remote.c
@@ -354,7 +354,7 @@ static int handle_config(const char *key, const char *value, void *cb)
 	struct remote_state *remote_state = cb;
 
 	if (parse_config_key(key, "branch", &name, &namelen, &subkey) >= 0) {
-		if (!name)
+		if (!name || !namelen)
 			return 0;
 		branch = make_branch(remote_state, name, namelen);
 		if (!strcmp(subkey, "remote")) {

-Peff



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux