Commit d96c0638 by Patrick Steinhardt Committed by Edward Thomson

submodule: avoid passing NULL pointers to strncmp

In C89 it is undefined behavior to pass `NULL` pointers to
`strncmp` and later on in C99 it has been explicitly stated that
functions with an argument declared as `size_t nmemb` specifying
the array length shall always have valid parameters, no matter if
`nmemb` is 0 or not (see ISO 9899 §7.21.1.2).

The function `str_equal_no_trailing_slash` always passes its
parameters to `strncmp` if their lengths match. This means if one
parameter is `NULL` and the other one either `NULL` or a string
with length 0 we will pass the pointers to `strncmp` and cause
undefined behavior.

Fix this by explicitly handling the case when both lengths are 0.
parent 1a16e8b0
...@@ -80,7 +80,8 @@ static kh_inline int str_equal_no_trailing_slash(const char *a, const char *b) ...@@ -80,7 +80,8 @@ static kh_inline int str_equal_no_trailing_slash(const char *a, const char *b)
if (blen > 0 && b[blen - 1] == '/') if (blen > 0 && b[blen - 1] == '/')
blen--; blen--;
return (alen == blen && strncmp(a, b, alen) == 0); return (alen == 0 && blen == 0) ||
(alen == blen && strncmp(a, b, alen) == 0);
} }
__KHASH_IMPL( __KHASH_IMPL(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment