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

[PATCH 1/1] http: Fix crash when passing malformed URL

From
AWAnton Wuerfel <anton.wuerfel@fau.de>
Date
Mar 16, 2016, 10:54 UTC
Message-ID
<1458125647-32707-2-git-send-email-anton.wuerfel@fau.de>
In-Reply-To
<1458125647-32707-1-git-send-email-anton.wuerfel@fau.de>

When passing a malformed URL to http_init() in http.c, git dies from a null pointer dereference. An example for a malformed URL is http:/git-scm.com (note the single slash after the protocol). This patch adds simple error handling as git notices the malformed URL already, but never checks the error value.

When passing a malformed URL, credential_from_url(struct credential *c, const char *url) initializes *c with null values. When the existence of `://` in url is checked, the function returns without further change of *c. The null pointer dereference occurs in get_curl_handle () at http.c:593, when the `protocol` field of struct credential is strcmp'ed:

Program received signal SIGSEGV, Segmentation fault.
0x0000000000405efd in get_curl_handle () at http.c:593
593                     if (!strcmp(http_auth.protocol, "https")) {
---
 http.c | 3 +++
 1 file changed, 3 insertions(+)
diff --git a/http.c b/http.c
index 69da445..80cf752 100644
--- a/http.c
+++ b/http.c
@@ -660,6 +660,9 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
 
 	http_is_verbose = 0;
 	normalized_url = url_normalize(url, &config.url);
+	
+	if (config.url.err)
+		die(_("libcurl: %s, URL: %s"), config.url.err, url);
 
 	git_config(urlmatch_config_entry, &config);
 	free(normalized_url);
-- 
2.8.0.rc1.108.g7827469
Previous: Anton WuerfelNext: Jeff King
Message 2 of 4 in “http: Fix crash when passing malformed URL”
  1. 0/1 http: Fix crash when passing malformed URLAnton Wuerfel, Mar 16, 2016
  2. 1/1 http: Fix crash when passing malformed URLAnton Wuerfel, Mar 16, 2016
  3. Jeff KingMar 16, 2016
  4. Jeff KingMar 16, 2016

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.