[clang-tidy] Add new checker for comparison with runtime string functions.
authorEtienne Bergeron <etienneb@google.com>
Thu, 21 Apr 2016 17:19:36 +0000 (17:19 +0000)
committerEtienne Bergeron <etienneb@google.com>
Thu, 21 Apr 2016 17:19:36 +0000 (17:19 +0000)
commitbae829ede5b164eb7bf139167846fb06b60afe27
treec77530b6d7930800d6a8ab67d072ae4dd2829aa4
parent1a299eab32acd4858e8651550b185be0767f7c70
[clang-tidy] Add new checker for comparison with runtime string functions.

Summary:
This checker is validating suspicious usage of string compare functions.

Example:
```
  if (strcmp(...))       // Implicitly compare to zero
  if (!strcmp(...))      // Won't warn
  if (strcmp(...) != 0)  // Won't warn
```

This patch was checked over large amount of code.
There is three checks:
  [*] Implicit comparator to zero (coding-style, many warnings found),
  [*] Suspicious implicit cast to non-integral (bugs!?, almost none found),
  [*] Comparison to suspicious constant (bugs!?, found two cases),

Example:
[[https://github.com/kylepjohnson/sigma/blob/master/sigma/native-installers/debian/dependencies/files/opt/sigma/E/HEURISTICS/che_to_precgen.c |
https://github.com/kylepjohnson/sigma/blob/master/sigma/native-installers/debian/dependencies/files/opt/sigma/E/HEURISTICS/che_to_precgen.c]]

```
      else if(strcmp(id, "select") == 0)
      {
         array->array[i].key1 = 25;
      }
      else if(strcmp(id, "sk") == 28)      // BUG!?
      {
         array->array[i].key1 = 20;
      }
```

Reviewers: alexfh

Subscribers: Eugene.Zelenko, cfe-commits

Differential Revision: http://reviews.llvm.org/D18703

llvm-svn: 267009
clang-tools-extra/clang-tidy/misc/CMakeLists.txt
clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp
clang-tools-extra/clang-tidy/misc/SuspiciousStringCompareCheck.cpp [new file with mode: 0644]
clang-tools-extra/clang-tidy/misc/SuspiciousStringCompareCheck.h [new file with mode: 0644]
clang-tools-extra/docs/clang-tidy/checks/list.rst
clang-tools-extra/docs/clang-tidy/checks/misc-suspicious-string-compare.rst [new file with mode: 0644]
clang-tools-extra/test/clang-tidy/misc-suspicious-string-compare.c [new file with mode: 0644]
clang-tools-extra/test/clang-tidy/misc-suspicious-string-compare.cpp [new file with mode: 0644]