bugprone-suspicious-string-compare¶
Find suspicious usage of runtime string comparison functions. This check is valid in C and C++.
Checks for calls with implicit comparator and proposed to explicitly add it.
if (strcmp(...)) // Implicitly compare to zero
if (!strcmp(...)) // Won't warn
if (strcmp(...) != 0) // Won't warn
Checks that compare function results (i.e., strcmp) are compared to valid
constant. The resulting value is
< 0 when lower than,
> 0 when greater than,
== 0 when equals.
A common mistake is to compare the result to 1 or
-1.
if (strcmp(...) == -1) // Incorrect usage of the returned value.
Additionally, the check warns if the results value is implicitly cast to a suspicious non-integer type. It’s happening when the returned value is used in a wrong context.
if (strcmp(...) < 0.) // Incorrect usage of the returned value.
Options¶
- WarnOnImplicitComparison¶
When
true, the check will warn on implicit comparison.trueby default.
- WarnOnLogicalNotComparison¶
When
true, the check will warn on logical not comparison.falseby default.
- StringCompareLikeFunctions¶
A string specifying the comma-separated names of the extra string comparison functions. Default is an empty string. The check will detect the following string comparison functions:
__builtin_memcmp,__builtin_strcasecmp,__builtin_strcmp,__builtin_strncasecmp,__builtin_strncmp,_mbscmp,_mbscmp_l,_mbsicmp,_mbsicmp_l,_mbsnbcmp,_mbsnbcmp_l,_mbsnbicmp,_mbsnbicmp_l,_mbsncmp,_mbsncmp_l,_mbsnicmp,_mbsnicmp_l,_memicmp,_memicmp_l,_stricmp,_stricmp_l,_strnicmp,_strnicmp_l,_wcsicmp,_wcsicmp_l,_wcsnicmp,_wcsnicmp_l,lstrcmp,lstrcmpi,memcmp,memicmp,strcasecmp,strcmp,strcmpi,stricmp,strncasecmp,strncmp,strnicmp,wcscasecmp,wcscmp,wcsicmp,wcsncmp,wcsnicmp,wmemcmp.