CLEANUP: http: silence a cppcheck warning in get_http_auth()

In issue #777, cppcheck wrongly assumes a useless null pointer check
in the expression below while it's obvious that in a 3G/1G split on
32-bit, len can become positive if p is NULL:

     p = memchr(ctx.value.ptr, ' ', ctx.value.len);
     len = p - ctx.value.ptr;
     if (!p || len <= 0)
           return 0;

In addition, on 64 bits you never know given that len is a 32-bit signed
int thus the sign of the result in case of a null p will always be the
opposite of the 32th bit of ctx.value.ptr. Admittedly the test is ugly.

Tim proposed this fix consisting in checking for p == ctx.value.ptr
instead when checking for first character only, which Ilya confirmed is
enough to shut cppcheck up. No backport is needed.
This commit is contained in:
Willy Tarreau 2020-09-02 07:08:47 +02:00
parent d00ce06d9d
commit 17254939c5

View File

@ -113,10 +113,10 @@ static int get_http_auth(struct sample *smp, struct htx *htx)
if (!http_find_header(htx, hdr, &ctx, 0))
return 0;
p = memchr(ctx.value.ptr, ' ', ctx.value.len);
len = p - ctx.value.ptr;
if (!p || len <= 0)
p = memchr(ctx.value.ptr, ' ', ctx.value.len);
if (!p || p == ctx.value.ptr) /* if no space was found or if the space is the first character */
return 0;
len = p - ctx.value.ptr;
if (chunk_initlen(&auth_method, ctx.value.ptr, 0, len) != 1)
return 0;