Commit f594b6ff159960efdc87e769141c34b87f30bbf2

Edward Thomson 2015-08-15T13:42:51

Merge pull request #3383 from libgit2/cmn/http-error http: propagate the credentials callback's error code

diff --git a/src/transports/http.c b/src/transports/http.c
index e3d90de..87f3ee8 100644
--- a/src/transports/http.c
+++ b/src/transports/http.c
@@ -36,6 +36,8 @@ static const char *post_verb = "POST";
 
 #define PARSE_ERROR_GENERIC	-1
 #define PARSE_ERROR_REPLAY	-2
+/** Look at the user field */
+#define PARSE_ERROR_EXT         -3
 
 #define CHUNK_SIZE	4096
 
@@ -78,6 +80,7 @@ typedef struct {
 	git_vector www_authenticate;
 	enum last_cb last_cb;
 	int parse_error;
+	int error;
 	unsigned parse_finished : 1;
 
 	/* Authentication */
@@ -351,7 +354,8 @@ static int on_headers_complete(http_parser *parser)
 				if (error == GIT_PASSTHROUGH) {
 					no_callback = 1;
 				} else if (error < 0) {
-					return PARSE_ERROR_GENERIC;
+					t->error = error;
+					return t->parse_error = PARSE_ERROR_EXT;
 				} else {
 					assert(t->cred);
 
@@ -712,6 +716,10 @@ replay:
 			goto replay;
 		}
 
+		if (t->parse_error == PARSE_ERROR_EXT) {
+			return t->error;
+		}
+
 		if (t->parse_error < 0)
 			return -1;