Author: rhuijben
Date: Mon Nov 16 11:04:40 2015
New Revision: 1714551
URL: http://svn.apache.org/viewvc?rev=1714551&view=rev
Log:
* buckets/request_buckets.c
(serf_incoming_rq_parse_rqline): Following up on r1714539, parse http
version, like we do in the response bucket.
Modified:
serf/trunk/buckets/request_buckets.c
Modified: serf/trunk/buckets/request_buckets.c
URL:
http://svn.apache.org/viewvc/serf/trunk/buckets/request_buckets.c?rev=1714551&r1=1714550&r2=1714551&view=diff
==============================================================================
--- serf/trunk/buckets/request_buckets.c (original)
+++ serf/trunk/buckets/request_buckets.c Mon Nov 16 11:04:40 2015
@@ -20,6 +20,7 @@
#include <apr_pools.h>
#include <apr_strings.h>
+#include <apr_date.h>
#include "serf.h"
#include "serf_bucket_util.h"
@@ -324,6 +325,7 @@ static apr_status_t serf_incoming_rq_par
{
incoming_request_context_t *ctx = bucket->data;
const char *spc, *spc2;
+ int res;
if (ctx->linebuf.used == 0) {
return SERF_ERROR_TRUNCATED_STREAM;
@@ -348,7 +350,19 @@ static apr_status_t serf_incoming_rq_par
else
return SERF_ERROR_TRUNCATED_STREAM;
- ctx->version = SERF_HTTP_11; /* ### Parse! */
+ spc2++;
+ /* ctx->linebuf.line should be of form: 'HTTP/1.1 200 OK',
+ but we also explicitly allow the forms 'HTTP/1.1 200' (no reason)
+ and 'HTTP/1.1 401.1 Logon failed' (iis extended error codes)
+ NOTE: Since r1699995 linebuf.line is always NUL terminated string. */
+ res = apr_date_checkmask(spc2, "HTTP/#.#");
+ if (!res) {
+ /* Not an HTTP response? Well, at least we won't understand it. */
+ return SERF_ERROR_BAD_HTTP_RESPONSE;
+ }
+
+ ctx->version = SERF_HTTP_VERSION(spc2[5] - '0',
+ spc2[7] - '0');
ctx->state++;
return APR_SUCCESS;