[core] use buffer_eq_icase_ssn func

specialized buffer_eq_icase_ssn func replace strncasecmp()
in cases where string lengths are not known to be at least
as large as the len being compared case-insensitively.
(Separate commit in case any future changes modify the
implementation to be unsafe for shorter strings, where
strncasecmp() would stop at '\0' in either string)
This commit is contained in:
Glenn Strauss 2019-06-06 01:49:38 -04:00
parent e20b5318d5
commit 1300815688
7 changed files with 11 additions and 13 deletions

View File

@ -560,7 +560,7 @@ static handler_t mod_auth_check_basic(server *srv, connection *con, void *p_d, c
return mod_auth_send_401_unauthorized_basic(srv, con, require->realm);
}
if (0 != strncasecmp(b->ptr, "Basic ", sizeof("Basic ")-1)) {
if (!buffer_eq_icase_ssn(b->ptr, CONST_STR_LEN("Basic "))) {
return mod_auth_send_401_unauthorized_basic(srv, con, require->realm);
}
#ifdef __COVERITY__
@ -951,7 +951,7 @@ static handler_t mod_auth_check_digest(server *srv, connection *con, void *p_d,
return mod_auth_send_401_unauthorized_digest(srv, con, require, 0);
}
if (0 != strncasecmp(vb->ptr, "Digest ", sizeof("Digest ")-1)) {
if (!buffer_eq_icase_ssn(vb->ptr, CONST_STR_LEN("Digest "))) {
return mod_auth_send_401_unauthorized_digest(srv, con, require, 0);
} else {
size_t n = buffer_string_length(vb);

View File

@ -471,7 +471,7 @@ static handler_t mod_authn_gssapi_check (server *srv, connection *con, void *p_d
return mod_authn_gssapi_send_401_unauthorized_negotiate(con);
}
if (0 != strncasecmp(vb->ptr, "Negotiate ", sizeof("Negotiate ")-1)) {
if (!buffer_eq_icase_ssn(vb->ptr, CONST_STR_LEN("Negotiate "))) {
return mod_authn_gssapi_send_400_bad_request(srv, con);
}

View File

@ -104,7 +104,7 @@ static void mod_authn_add_scheme (server *srv, buffer *host)
if (!buffer_string_is_empty(srv->tmp_buf))
buffer_append_string_len(srv->tmp_buf, CONST_STR_LEN(","));
for (j = 0; j < sizeof(schemes)/sizeof(char *); ++j) {
if (0 == strncasecmp(b, schemes[j], strlen(schemes[j]))) {
if (buffer_eq_icase_ssn(b, schemes[j], strlen(schemes[j]))) {
break;
}
}

View File

@ -15,7 +15,6 @@
#include <sys/types.h>
#include <sys/stat.h>
#include "sys-strings.h"
#include <fcntl.h>
#include <unistd.h>
@ -798,7 +797,7 @@ static int mod_compress_contains_encoding(const char *headervalue, const char *e
while (*m == ',' || *m == ' ' || *m == '\t') {
++m;
}
if (0 == strncasecmp(m, encoding, len)) {
if (buffer_eq_icase_ssn(m, encoding, len)) {
/*(not a full HTTP field parse: not parsing for q-values and not handling q=0)*/
m += len;
if (*m == '\0' || *m == ',' || *m == ';' || *m == ' ' || *m == '\t')

View File

@ -68,7 +68,7 @@ static void mod_vhostdb_dbconf_add_scheme (server *srv, buffer *host)
if (!buffer_string_is_empty(srv->tmp_buf))
buffer_append_string_len(srv->tmp_buf, CONST_STR_LEN(","));
for (j = 0; j < sizeof(schemes)/sizeof(char *); ++j) {
if (0 == strncasecmp(b, schemes[j], strlen(schemes[j]))) {
if (buffer_eq_icase_ssn(b, schemes[j], strlen(schemes[j]))) {
break;
}
}

View File

@ -171,7 +171,6 @@
#include <stdio.h> /* rename() */
#include <stdlib.h> /* strtol() */
#include <string.h>
#include <strings.h> /* strncasecmp() */
#include <unistd.h> /* getpid() linkat() rmdir() unlinkat() */
#ifndef _D_EXACT_NAMLEN
@ -5184,7 +5183,7 @@ mod_webdav_lock (connection * const con, const plugin_config * const pconf)
const char *p = h->ptr;
do {
if ((*p | 0x20) == 's'
&& 0 == strncasecmp(p, CONST_STR_LEN("second-"))) {
&& buffer_eq_icase_ssn(p, CONST_STR_LEN("second-"))) {
long t = strtol(p+sizeof("second-")-1, NULL, 10);
if (0 < t && t < lockdata.timeout)
lockdata.timeout = t > 5 ? t : 5;
@ -5200,7 +5199,7 @@ mod_webdav_lock (connection * const con, const plugin_config * const pconf)
}
#if 0
else if ((*p | 0x20) == 'i'
&& 0 == strncasecmp(p, CONST_STR_LEN("infinity"))) {
&& buffer_eq_icase_ssn(p, CONST_STR_LEN("infinity"))) {
lockdata.timeout = INT32_MAX;
break;
}

View File

@ -411,7 +411,7 @@ static int header_contains_token (buffer *b, const char *m, size_t mlen)
{
for (char *s = b->ptr; s; s = strchr(s, ',')) {
while (*s == ' ' || *s == '\t' || *s == ',') ++s;
if (0 == strncasecmp(s, m, mlen)) {
if (buffer_eq_icase_ssn(s, m, mlen)) {
s += mlen;
if (*s == '\0' || *s == ' ' || *s == '\t' || *s == ',' || *s == ';')
return 1;
@ -535,7 +535,7 @@ static handler_t wstunnel_handler_setup (server *srv, connection *con, plugin_da
if (NULL != vb) {
for (const char *s = vb->ptr; *s; ++s) {
while (*s==' '||*s=='\t'||*s=='\r'||*s=='\n') ++s;
if (0 == strncasecmp(s, "binary", sizeof("binary")-1)) {
if (buffer_eq_icase_ssn(s, CONST_STR_LEN("binary"))) {
s += sizeof("binary")-1;
while (*s==' '||*s=='\t'||*s=='\r'||*s=='\n') ++s;
if (*s==','||*s=='\0') {
@ -544,7 +544,7 @@ static handler_t wstunnel_handler_setup (server *srv, connection *con, plugin_da
break;
}
}
else if (0 == strncasecmp(s, "base64", sizeof("base64")-1)) {
else if (buffer_eq_icase_ssn(s, CONST_STR_LEN("base64"))) {
s += sizeof("base64")-1;
while (*s==' '||*s=='\t'||*s=='\r'||*s=='\n') ++s;
if (*s==','||*s=='\0') {