[PATCH] D45050: [clang-tidy] New checker for not null-terminated result caused by strlen or wcslen

Csaba Dabis via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Apr 24 02:50:31 PDT 2018


Charusso marked an inline comment as done.
Charusso added inline comments.


================
Comment at: clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp:226
+    DiagnosticBuilder &Diag) {
+  if (getLangOpts().CPlusPlus11) {
+    StringRef NewFuncName = (Name[0] != 'w') ? "strncpy_s" : "wcsncpy_s";
----------------
aaron.ballman wrote:
> Charusso wrote:
> > aaron.ballman wrote:
> > > What about C?
> > The `else` part would fire.
> I think this comment got moved to an unrelated area. I was talking about `NotNullTerminatedResultCheck::memmoveFix()`, where there is no `else` clause. However, I'm also not entirely certain why you are assuming the _s versions of those functions are available in C++ (they're in Annex K for C, which is an optional annex).
The `else` clause is missing, according to the documentation: 

> - ``memmove``, ``wmemmove``:
>   - C11: New function is ``memmove_s``/``wmemmove_s``, it has four arguments,
>   - the new second argument is the first argument's length, and
>   - the third argument will be moved as the fourth, where ``+ 1`` needed.
> 
>   - Before C11: The third argument gets a ``+ 1`` operation.

So the third argument as a token remains third if I add an extra second argument as a string, that's why it's work well on both options.


https://reviews.llvm.org/D45050





More information about the cfe-commits mailing list