File tree Expand file tree Collapse file tree 2 files changed +25
-5
lines changed Expand file tree Collapse file tree 2 files changed +25
-5
lines changed Original file line number Diff line number Diff line change @@ -802,11 +802,14 @@ void NotNullTerminatedResultCheck::check(
802802 while (It != PP->macro_end () && !AreSafeFunctionsWanted.hasValue ()) {
803803 if (It->first ->getName () == " __STDC_WANT_LIB_EXT1__" ) {
804804 const auto *MI = PP->getMacroInfo (It->first );
805- const auto &T = MI->tokens ().back ();
806- StringRef ValueStr = StringRef (T.getLiteralData (), T.getLength ());
807- llvm::APInt IntValue;
808- ValueStr.getAsInteger (10 , IntValue);
809- AreSafeFunctionsWanted = IntValue.getZExtValue ();
805+ // PP->getMacroInfo() returns nullptr if macro has no definition.
806+ if (MI) {
807+ const auto &T = MI->tokens ().back ();
808+ StringRef ValueStr = StringRef (T.getLiteralData (), T.getLength ());
809+ llvm::APInt IntValue;
810+ ValueStr.getAsInteger (10 , IntValue);
811+ AreSafeFunctionsWanted = IntValue.getZExtValue ();
812+ }
810813 }
811814
812815 ++It;
Original file line number Diff line number Diff line change 1+ // RUN: %check_clang_tidy %s bugprone-not-null-terminated-result %t -- \
2+ // RUN: -- -std=c11 -I %S/Inputs/bugprone-not-null-terminated-result
3+
4+ #include "not-null-terminated-result-c.h"
5+
6+ #define __STDC_LIB_EXT1__ 1
7+ #define __STDC_WANT_LIB_EXT1__ 1
8+ #undef __STDC_WANT_LIB_EXT1__
9+
10+ void f (const char * src ) {
11+ char dest [13 ];
12+ memcpy_s (dest , 13 , src , strlen (src ) - 1 );
13+ // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: the result from calling 'memcpy_s' is not null-terminated [bugprone-not-null-terminated-result]
14+ // CHECK-FIXES: char dest[14];
15+ // CHECK-FIXES-NEXT: strncpy_s(dest, 14, src, strlen(src) - 1);
16+ }
17+
You can’t perform that action at this time.
0 commit comments