Bug 1475882 - clang-analyzer: Enable clang-analyzer-unix.cstring.NullArg check. r?andi draft
authorChris Peterson <cpeterson@mozilla.com>
Sat, 14 Jul 2018 22:07:12 -0700
changeset 819043 99547c607983003f1ce4a338ce8720d56a75f91f
parent 819042 348e071ba1af575a3228459e779697c0e71520ca
child 819044 cc7734e08afad52293a6b09a12abdee540ea7321
push id116421
push usercpeterson@mozilla.com
push dateTue, 17 Jul 2018 01:36:52 +0000
reviewersandi
bugs1475882
milestone63.0a1
Bug 1475882 - clang-analyzer: Enable clang-analyzer-unix.cstring.NullArg check. r?andi Check for null pointers being passed as arguments to C string functions. There are no clang-analyzer-unix.cstring.NullArg warnings in mozilla-central! strlen strnlen strcpy strncpy strcat strncat strcmp strncmp strcasecmp strncasecmp https://clang-analyzer.llvm.org/available_checks.html MozReview-Commit-ID: EkfaItfo5cu
tools/clang-tidy/config.yaml
tools/clang-tidy/test/clang-analyzer-unix.cstring.NullArg.cpp
tools/clang-tidy/test/clang-analyzer-unix.cstring.NullArg.json
tools/clang-tidy/test/structures.h
--- a/tools/clang-tidy/config.yaml
+++ b/tools/clang-tidy/config.yaml
@@ -31,16 +31,18 @@ clang_checkers:
   - name: clang-analyzer-security.insecureAPI.strcpy
     publish: !!bool no
   - name: clang-analyzer-security.insecureAPI.UncheckedReturn
     publish: !!bool yes
   - name: clang-analyzer-security.insecureAPI.vfork
     publish: !!bool yes
   - name: clang-analyzer-unix.cstring.BadSizeArg
     publish: !!bool yes
+  - name: clang-analyzer-unix.cstring.NullArg
+    publish: !!bool yes
   - name: misc-argument-comment
     publish: !!bool yes
   - name: misc-assert-side-effect
     publish: !!bool yes
   - name: misc-bool-pointer-implicit-conversion
     publish: !!bool yes
   - name: misc-forward-declaration-namespace
     # Name with clang tidy 6.0. We are currently using 5.0
new file mode 100644
--- /dev/null
+++ b/tools/clang-tidy/test/clang-analyzer-unix.cstring.NullArg.cpp
@@ -0,0 +1,14 @@
+// https://clang-analyzer.llvm.org/available_checks.html
+
+#include "structures.h"
+
+int my_strlen(const char* s)
+{
+  return strlen(s); // warning
+}
+
+int bad_caller()
+{
+  const char* s = nullptr;
+  return my_strlen(s);
+}
new file mode 100644
--- /dev/null
+++ b/tools/clang-tidy/test/clang-analyzer-unix.cstring.NullArg.json
@@ -0,0 +1,1 @@
+"[[\"warning\", \"Null pointer argument in call to string length function\", \"clang-analyzer-unix.cstring.NullArg\"]]"
\ No newline at end of file
--- a/tools/clang-tidy/test/structures.h
+++ b/tools/clang-tidy/test/structures.h
@@ -83,9 +83,10 @@ char *mktemp(char *tmpl);
 pid_t vfork(void);
 
 int abort() { return 0; }
 
 #define assert(x)                                                              \
   if (!(x))                                                                    \
   (void)abort()
 
+std::size_t strlen(const char *s);
 char *strncat(char *s1, const char *s2, std::size_t n);