File tree 2 files changed +25
-5
lines changed
2 files changed +25
-5
lines changed Original file line number Diff line number Diff line change @@ -802,11 +802,14 @@ void NotNullTerminatedResultCheck::check(
802
802
while (It != PP->macro_end () && !AreSafeFunctionsWanted.hasValue ()) {
803
803
if (It->first ->getName () == " __STDC_WANT_LIB_EXT1__" ) {
804
804
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
+ }
810
813
}
811
814
812
815
++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