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

Segfault when cloning http:// without libcurl

From
Thomas Rast <trast@student.ethz.ch>
Date
May 27, 2008, 09:24 UTC
Message-ID
<200805271124.50172.trast@student.ethz.ch>
Hi all

1.5.6.rc0.15.gd513 segfaults when attempting to clone from a http:// repository if compiled without libcurl:

(gdb) run clone http://repo.or.cz/r/git-homepage.git/ [..] error: git was compiled without libcurl support.

Program received signal SIGSEGV, Segmentation fault. 0x00000000 in ?? () (gdb) bt #0 0x00000000 in ?? () #1 0x080dd18d in transport_get_remote_refs (transport=0x814dbf0) at transport.c:795 #2 0x0805d24b in cmd_clone (argc=1, argv=0xbfda0ae8, prefix=0x0) at builtin-clone.c:461 #3 0x0804adbf in handle_internal_command (argc=2, argv=0xbfda0ae8) at git.c:249 #4 0x0804afa9 in main (argc=2, argv=0xbfda0ae8) at git.c:444 (gdb) up #1 0x080dd18d in transport_get_remote_refs (transport=0x814dbf0) at transport.c:795 795 transport->remote_refs = transport->get_refs_list(transport);

The underlying problem seems to be that at builtin-clone.c:160, no error checking is done on the output of transport_get():

	transport = transport_get(remote, ref_git_copy);
	for (extra = transport_get_remote_refs(transport); extra;
	     extra = extra->next)
		add_extra_ref(extra->name, extra->old_sha1, 0);

But transport_get() never sets the ->get_refs_list() member if libcurl wasn't enabled at compile time, cf. transport.c:738:

#ifdef NO_CURL
		error("git was compiled without libcurl support.");
#else
		ret->get_refs_list = get_refs_via_curl;
		ret->fetch = fetch_objs_via_curl;
		ret->push = curl_transport_push;
#endif

Some digging shows that at the time the above #ifdef was inserted (ccfc02a3), there was no builtin-clone.c, so the error checking probably got lost in the translation.

I'd attempt to write a patch, but it looks like I would have to read into a lot of code for a fairly trivial issue, so I hope someone can help me out with this...

- Thomas
-- 
Thomas Rast
trast@student.ethz.ch
Next: Jeff King
Message 1 of 5 in “Segfault when cloning http:// without libcurl”
  1. Thomas RastMay 27, 2008
  2. clone: make sure we support the transport typeJeff King, May 27, 2008
  3. Mike HommeyMay 27, 2008
  4. Daniel BarkalowMay 27, 2008
  5. Daniel BarkalowMay 27, 2008

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.