BUG/MEDIUM: http: the "http_first_req" sample fetch could crash without a steeam
authorWilly Tarreau <w@1wt.eu>
Wed, 29 Apr 2020 09:52:13 +0000 (11:52 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 1 May 2020 10:21:24 +0000 (12:21 +0200)
Since commit 5f940703b3 ("MINOR: log: Don't depends on a stream to process
samples in log-format string") it has become quite obvious that a few sample
fetch functions and converters were still heavily dependent on the presence
of a stream without testing for it.

The http_first_req sample fetch function, if called without a stream, will
result in a crash.

This fix adds a check for the stream's existence, and should be backported
to all stable versions up to 1.6.

(cherry picked from commit 79512b6d8f2f049a86b2332d4f4dc972cc33d631)
Signed-off-by: Willy Tarreau <w@1wt.eu>

src/http_fetch.c

index 723aa1f..24f6d6a 100644 (file)
@@ -1189,6 +1189,9 @@ static int smp_fetch_proto_http(const struct arg *args, struct sample *smp, cons
 /* return a valid test if the current request is the first one on the connection */
 static int smp_fetch_http_first_req(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
+       if (!smp->strm)
+               return 0;
+
        smp->data.type = SMP_T_BOOL;
        smp->data.u.sint = !(smp->strm->txn->flags & TX_NOT_FIRST);
        return 1;