BUG/MEDIUM: httpclient: segfault when the httpclient parser fails

If the uri is unexpected ("/" in place of "http://xxx/"), some parsing
function fails. The failure is not handled.

This patch handle these errors. Note: the return code is boolean, maybe
we can return more precise error for Lua reporting ?

Must be backported in 2.6.
diff --git a/src/http_client.c b/src/http_client.c
index cd12a8e..2f9bac5 100644
--- a/src/http_client.c
+++ b/src/http_client.c
@@ -476,10 +476,10 @@
 }
 
 /*
- * Return a split URL in <scheme>, <host>, <port>
+ * Split <url> in <scheme>, <host>, <port>
  */
-static void httpclient_spliturl(struct ist url, enum http_scheme *scheme,
-                                struct ist *host, int *port)
+static int httpclient_spliturl(struct ist url, enum http_scheme *scheme,
+                               struct ist *host, int *port)
 {
 	enum http_scheme scheme_tmp = SCH_HTTP;
 	int port_tmp = 0;
@@ -489,6 +489,9 @@
 
 	parser = http_uri_parser_init(url);
 	scheme_ist = http_parse_scheme(&parser);
+	if (!isttest(scheme_ist)) {
+		return 0;
+	}
 
 	if (isteqi(scheme_ist, ist("http://"))){
 		scheme_tmp = SCH_HTTP;
@@ -499,6 +502,9 @@
 	}
 
 	authority_ist = http_parse_authority(&parser, 1);
+	if (!isttest(authority_ist)) {
+		return 0;
+	}
 	p = end = istend(authority_ist);
 
 	/* look for a port at the end of the authority */
@@ -521,6 +527,7 @@
 	if (port)
 		*port = port_tmp;
 
+	return 1;
 }
 
 /*
@@ -1006,7 +1013,8 @@
 
 
 	/* parse the URL and  */
-	httpclient_spliturl(hc->req.url, &scheme, &host, &port);
+	if (!httpclient_spliturl(hc->req.url, &scheme, &host, &port))
+		goto out_error;
 
 	if (hc->dst) {
 		/* if httpclient_set_dst() was used, sets the alternative address */