[PATCH] D45050: [clang-tidy] New checker for not null-terminated result caused by strlen(), size() or equal length

Csaba Dabis via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sat Sep 14 08:26:19 PDT 2019


Charusso updated this revision to Diff 220215.
Charusso edited the summary of this revision.
Charusso removed reviewers: hokein, ilya-biryukov, xbolva00, dyung.
Charusso set the repository for this revision to rCTE Clang Tools Extra.
Charusso added a comment.
Herald added a project: clang.

After a while I try to make this patch arrive. I wanted to split it up to multiple patches, but everything tied together so I decided to fix false positives instead with improving the existing APIs. Please visit the diff of the test cases and the documentation to see the changes.

Here are some interesting findings:

  bitcoin/src/leveldb/db/c.cc:
  - char* result = reinterpret_cast<char*>(malloc(sizeof(char) * str.size()));
  - memcpy(result, str.data(), sizeof(char) * str.size());
  + char* result = reinterpret_cast<char*>(malloc((sizeof(char) * str.size()) + 1));
  + strcpy(result, str.data());
  
  ffmpeg/libavformat/avio.c:
  - memmove(start, key+1, strlen(key));
  + memmove(start, key+1, strlen(key) + 1);
  
  ffmpeg/libavformat/mpeg.c:
  - memcpy(ext, !strncmp(ext, "IDX", 3) ? "SUB" : "sub", 3);
  + strcpy(ext, !strncmp(ext, "IDX", 3) ? "SUB" : "sub");
  
  ffmpeg/libavformat/oggparseskeleton.c:
  - strncmp(buf, "fishead", 8)
  + strncmp(buf, "fishead", 7)
  
  sqlite/shell.c:
  #define APND_MARK_PREFIX     "Start-Of-SQLite3-"
  #define APND_MARK_PREFIX_SZ  17
  unsigned char a[APND_MARK_SIZE];
  - memcpy(a, APND_MARK_PREFIX, APND_MARK_PREFIX_SZ);
  + strcpy((char *)a, APND_MARK_PREFIX);


Repository:
  rCTE Clang Tools Extra

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D45050/new/

https://reviews.llvm.org/D45050

Files:
  clang-tools-extra/clang-tidy/bugprone/BugproneTidyModule.cpp
  clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt
  clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp
  clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.h
  clang-tools-extra/docs/ReleaseNotes.rst
  clang-tools-extra/docs/clang-tidy/checks/bugprone-not-null-terminated-result.rst
  clang-tools-extra/docs/clang-tidy/checks/list.rst
  clang-tools-extra/test/clang-tidy/Inputs/bugprone-not-null-terminated-result/not-null-terminated-result-c.h
  clang-tools-extra/test/clang-tidy/Inputs/bugprone-not-null-terminated-result/not-null-terminated-result-cxx.h
  clang-tools-extra/test/clang-tidy/bugprone-not-null-terminated-result-in-initialization-strlen.c
  clang-tools-extra/test/clang-tidy/bugprone-not-null-terminated-result-memcpy-before-safe.c
  clang-tools-extra/test/clang-tidy/bugprone-not-null-terminated-result-memcpy-safe-cxx.cpp
  clang-tools-extra/test/clang-tidy/bugprone-not-null-terminated-result-memcpy-safe-other.c
  clang-tools-extra/test/clang-tidy/bugprone-not-null-terminated-result-memcpy-safe.c
  clang-tools-extra/test/clang-tidy/bugprone-not-null-terminated-result-strlen.c
  clang-tools-extra/test/clang-tidy/bugprone-not-null-terminated-result-wcslen.cpp
  clang-tools-extra/test/clang-tidy/bugprone-not-null-terminated-result-wmemcpy-safe-cxx.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D45050.220215.patch
Type: text/x-patch
Size: 91911 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190914/e99b4626/attachment-0001.bin>


More information about the cfe-commits mailing list