[MINOR] ensure that http_msg_analyzer updates pointer to invalid char

If an invalid character is encountered while parsing an HTTP message, we
want to get buf->lr updated to reflect it.

Along this change, a few useless __label__ declarations have been removed
because they caused gcc to consume stack space without putting anything
there.
diff --git a/src/proto_http.c b/src/proto_http.c
index 6fd84f4..86b411e 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -465,7 +465,6 @@
 		      const char *sol, struct hdr_idx *idx,
 		      struct hdr_ctx *ctx)
 {
-	__label__ return_hdr, next_hdr;
 	const char *eol, *sov;
 	int cur_idx;
 
@@ -954,16 +953,6 @@
 			       unsigned int state, const char *ptr, const char *end,
 			       char **ret_ptr, unsigned int *ret_state)
 {
-	__label__
-		http_msg_rpver,
-		http_msg_rpver_sp,
-		http_msg_rpcode,
-		http_msg_rpcode_sp,
-		http_msg_rpreason,
-		http_msg_rpline_eol,
-		http_msg_ood,     /* out of data */
-		http_msg_invalid;
-
 	switch (state)	{
 	http_msg_rpver:
 	case HTTP_MSG_RPVER:
@@ -974,8 +963,9 @@
 			msg->sl.st.v_l = (ptr - msg_buf) - msg->som;
 			EAT_AND_JUMP_OR_RETURN(http_msg_rpver_sp, HTTP_MSG_RPVER_SP);
 		}
-		goto http_msg_invalid;
-		
+		state = HTTP_MSG_ERROR;
+		break;
+
 	http_msg_rpver_sp:
 	case HTTP_MSG_RPVER_SP:
 		if (likely(!HTTP_IS_LWS(*ptr))) {
@@ -985,7 +975,8 @@
 		if (likely(HTTP_IS_SPHT(*ptr)))
 			EAT_AND_JUMP_OR_RETURN(http_msg_rpver_sp, HTTP_MSG_RPVER_SP);
 		/* so it's a CR/LF, this is invalid */
-		goto http_msg_invalid;
+		state = HTTP_MSG_ERROR;
+		break;
 
 	http_msg_rpcode:
 	case HTTP_MSG_RPCODE:
@@ -1039,18 +1030,12 @@
 	}
 
  http_msg_ood:
-	/* out of data */
+	/* out of valid data */
 	if (ret_state)
 		*ret_state = state;
 	if (ret_ptr)
 		*ret_ptr = (char *)ptr;
 	return NULL;
-
- http_msg_invalid:
-	/* invalid message */
-	if (ret_state)
-		*ret_state = HTTP_MSG_ERROR;
-	return NULL;
 }
 
 
@@ -1077,16 +1062,6 @@
 			       unsigned int state, const char *ptr, const char *end,
 			       char **ret_ptr, unsigned int *ret_state)
 {
-	__label__
-		http_msg_rqmeth,
-		http_msg_rqmeth_sp,
-		http_msg_rquri,
-		http_msg_rquri_sp,
-		http_msg_rqver,
-		http_msg_rqline_eol,
-		http_msg_ood,     /* out of data */
-		http_msg_invalid;
-
 	switch (state)	{
 	http_msg_rqmeth:
 	case HTTP_MSG_RQMETH:
@@ -1110,8 +1085,9 @@
 			msg->sl.rq.v_l = 0;
 			goto http_msg_rqline_eol;
 		}
-		goto http_msg_invalid;
-		
+		state = HTTP_MSG_ERROR;
+		break;
+
 	http_msg_rqmeth_sp:
 	case HTTP_MSG_RQMETH_SP:
 		if (likely(!HTTP_IS_LWS(*ptr))) {
@@ -1166,7 +1142,8 @@
 		}
 
 		/* neither an HTTP_VER token nor a CRLF */
-		goto http_msg_invalid;
+		state = HTTP_MSG_ERROR;
+		break;
 
 #ifdef DEBUG_FULL
 	default:
@@ -1176,18 +1153,12 @@
 	}
 
  http_msg_ood:
-	/* out of data */
+	/* out of valid data */
 	if (ret_state)
 		*ret_state = state;
 	if (ret_ptr)
 		*ret_ptr = (char *)ptr;
 	return NULL;
-
- http_msg_invalid:
-	/* invalid message */
-	if (ret_state)
-		*ret_state = HTTP_MSG_ERROR;
-	return NULL;
 }
 
 
@@ -1201,24 +1172,6 @@
  */
 void http_msg_analyzer(struct buffer *buf, struct http_msg *msg, struct hdr_idx *idx)
 {
-	__label__
-		http_msg_rqbefore,
-		http_msg_rqbefore_cr,
-		http_msg_rqmeth,
-		http_msg_rqline_end,
-		http_msg_hdr_first,
-		http_msg_hdr_name,
-		http_msg_hdr_l1_sp,
-		http_msg_hdr_l1_lf,
-		http_msg_hdr_l1_lws,
-		http_msg_hdr_val,
-		http_msg_hdr_l2_lf,
-		http_msg_hdr_l2_lws,
-		http_msg_complete_header,
-		http_msg_last_lf,
-		http_msg_ood,     /* out of data */
-		http_msg_invalid;
-
 	unsigned int state;       /* updated only when leaving the FSM */
 	register char *ptr, *end; /* request pointers, to avoid dereferences */
 
@@ -1538,6 +1491,7 @@
  http_msg_invalid:
 	/* invalid message */
 	msg->msg_state = HTTP_MSG_ERROR;
+	buf->lr = ptr;
 	return;
 }
 
@@ -1565,6 +1519,16 @@
  */
 int http_process_request(struct session *s, struct buffer *req)
 {
+
+	DPRINTF(stderr,"[%u] %s: session=%p b=%p, exp(r,w)=%u,%u bf=%08x bl=%d analysers=%02x\n",
+		now_ms, __FUNCTION__,
+		s,
+		req,
+		req->rex, req->wex,
+		req->flags,
+		req->l,
+		req->analysers);
+
 	/*
 	 * We will parse the partial (or complete) lines.
 	 * We will check the request syntax, and also join multi-line
@@ -1586,15 +1550,6 @@
 	struct http_msg *msg = &txn->req;
 	struct proxy *cur_proxy;
 
-	DPRINTF(stderr,"[%u] %s: session=%p b=%p, exp(r,w)=%u,%u bf=%08x bl=%d analysers=%02x\n",
-		now_ms, __FUNCTION__,
-		s,
-		req,
-		req->rex, req->wex,
-		req->flags,
-		req->l,
-		req->analysers);
-
 	if (likely(req->lr < req->r))
 		http_msg_analyzer(req, msg, &txn->hdr_idx);