r370061 - Fix a SARIF exporter crash with macro expansions
Joe Ranieri via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 27 07:20:27 PDT 2019
Author: jranieri
Date: Tue Aug 27 07:20:27 2019
New Revision: 370061
URL: http://llvm.org/viewvc/llvm-project?rev=370061&view=rev
Log:
Fix a SARIF exporter crash with macro expansions
Differential Revision: https://reviews.llvm.org/D65209
Modified:
cfe/trunk/lib/StaticAnalyzer/Core/SarifDiagnostics.cpp
cfe/trunk/test/Analysis/diagnostics/Inputs/expected-sarif/sarif-multi-diagnostic-test.c.sarif
cfe/trunk/test/Analysis/diagnostics/sarif-multi-diagnostic-test.c
Modified: cfe/trunk/lib/StaticAnalyzer/Core/SarifDiagnostics.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/SarifDiagnostics.cpp?rev=370061&r1=370060&r2=370061&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/SarifDiagnostics.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/SarifDiagnostics.cpp Tue Aug 27 07:20:27 2019
@@ -219,9 +219,10 @@ static json::Object createThreadFlow(con
for (const auto &Piece : Pieces) {
const PathDiagnosticLocation &P = Piece->getLocation();
Locations.push_back(createThreadFlowLocation(
- createLocation(createPhysicalLocation(P.asRange(),
- *P.asLocation().getFileEntry(),
- SMgr, Files),
+ createLocation(createPhysicalLocation(
+ P.asRange(),
+ *P.asLocation().getExpansionLoc().getFileEntry(),
+ SMgr, Files),
Piece->getString()),
calculateImportance(*Piece)));
}
@@ -255,7 +256,8 @@ static json::Object createResult(const P
{"locations",
json::Array{createLocation(createPhysicalLocation(
Diag.getLocation().asRange(),
- *Diag.getLocation().asLocation().getFileEntry(), SMgr, Files))}},
+ *Diag.getLocation().asLocation().getExpansionLoc().getFileEntry(),
+ SMgr, Files))}},
{"ruleIndex", Iter->getValue()},
{"ruleId", Diag.getCheckName()}};
}
Modified: cfe/trunk/test/Analysis/diagnostics/Inputs/expected-sarif/sarif-multi-diagnostic-test.c.sarif
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/diagnostics/Inputs/expected-sarif/sarif-multi-diagnostic-test.c.sarif?rev=370061&r1=370060&r2=370061&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/diagnostics/Inputs/expected-sarif/sarif-multi-diagnostic-test.c.sarif (original)
+++ cfe/trunk/test/Analysis/diagnostics/Inputs/expected-sarif/sarif-multi-diagnostic-test.c.sarif Tue Aug 27 07:20:27 2019
@@ -6,7 +6,7 @@
{
"fileLocation": {
},
- "length": 686,
+ "length": 951,
"mimeType": "text/plain",
"roles": [
"resultFile"
@@ -43,6 +43,16 @@
"name": {
"text": "core.DivideZero"
}
+ },
+ {
+ "fullDescription": {
+ "text": "Check for memory leaks, double free, and use-after-free problems. Traces memory managed by malloc()/free()."
+ },
+ "helpUri": "https://clang-analyzer.llvm.org/available_checks.html#unix.Malloc",
+ "id": "unix.Malloc",
+ "name": {
+ "text": "unix.Malloc"
+ }
}
]
},
@@ -65,9 +75,9 @@
},
"region": {
"endColumn": 6,
- "endLine": 24,
+ "endLine": 34,
"startColumn": 3,
- "startLine": 24
+ "startLine": 34
}
}
}
@@ -84,9 +94,9 @@
},
"region": {
"endColumn": 18,
- "endLine": 9,
+ "endLine": 11,
"startColumn": 11,
- "startLine": 9
+ "startLine": 11
}
}
}
@@ -104,9 +114,9 @@
},
"region": {
"endColumn": 18,
- "endLine": 9,
+ "endLine": 11,
"startColumn": 11,
- "startLine": 9
+ "startLine": 11
}
}
}
@@ -135,9 +145,9 @@
},
"region": {
"endColumn": 6,
- "endLine": 25,
+ "endLine": 35,
"startColumn": 3,
- "startLine": 25
+ "startLine": 35
}
}
}
@@ -154,9 +164,9 @@
},
"region": {
"endColumn": 11,
- "endLine": 13,
+ "endLine": 15,
"startColumn": 3,
- "startLine": 13
+ "startLine": 15
}
}
}
@@ -173,9 +183,9 @@
},
"region": {
"endColumn": 9,
- "endLine": 14,
+ "endLine": 16,
"startColumn": 3,
- "startLine": 14
+ "startLine": 16
}
}
}
@@ -193,9 +203,9 @@
},
"region": {
"endColumn": 9,
- "endLine": 14,
+ "endLine": 16,
"startColumn": 3,
- "startLine": 14
+ "startLine": 16
}
}
}
@@ -224,9 +234,9 @@
},
"region": {
"endColumn": 13,
- "endLine": 18,
+ "endLine": 20,
"startColumn": 7,
- "startLine": 18
+ "startLine": 20
}
}
}
@@ -244,7 +254,7 @@
"region": {
"endColumn": 3,
"startColumn": 3,
- "startLine": 18
+ "startLine": 20
}
}
}
@@ -262,7 +272,7 @@
"region": {
"endColumn": 14,
"startColumn": 14,
- "startLine": 19
+ "startLine": 21
}
}
}
@@ -281,7 +291,7 @@
"region": {
"endColumn": 14,
"startColumn": 14,
- "startLine": 19
+ "startLine": 21
}
}
}
@@ -291,6 +301,111 @@
},
"ruleId": "core.DivideZero",
"ruleIndex": 2
+ },
+ {
+ "codeFlows": [
+ {
+ "threadFlows": [
+ {
+ "locations": [
+ {
+ "importance": "essential",
+ "location": {
+ "message": {
+ "text": "Memory is allocated"
+ },
+ "physicalLocation": {
+ "fileLocation": {
+ "fileIndex": 0,
+ },
+ "region": {
+ "endColumn": 24,
+ "endLine": 26,
+ "startColumn": 15,
+ "startLine": 26
+ }
+ }
+ }
+ },
+ {
+ "importance": "important",
+ "location": {
+ "message": {
+ "text": "Assuming 'i' is < 4"
+ },
+ "physicalLocation": {
+ "fileLocation": {
+ "fileIndex": 0,
+ },
+ "region": {
+ "endColumn": 12,
+ "endLine": 27,
+ "startColumn": 7,
+ "startLine": 27
+ }
+ }
+ }
+ },
+ {
+ "importance": "unimportant",
+ "location": {
+ "message": {
+ "text": "Taking true branch"
+ },
+ "physicalLocation": {
+ "fileLocation": {
+ "fileIndex": 0,
+ },
+ "region": {
+ "endColumn": 3,
+ "startColumn": 3,
+ "startLine": 27
+ }
+ }
+ }
+ },
+ {
+ "importance": "essential",
+ "location": {
+ "message": {
+ "text": "Potential leak of memory pointed to by 'mem'"
+ },
+ "physicalLocation": {
+ "fileLocation": {
+ "fileIndex": 0,
+ },
+ "region": {
+ "endColumn": 12,
+ "startColumn": 12,
+ "startLine": 28
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "locations": [
+ {
+ "physicalLocation": {
+ "fileLocation": {
+ "fileIndex": 0,
+ },
+ "region": {
+ "endColumn": 12,
+ "startColumn": 12,
+ "startLine": 28
+ }
+ }
+ }
+ ],
+ "message": {
+ "text": "Potential leak of memory pointed to by 'mem'"
+ },
+ "ruleId": "unix.Malloc",
+ "ruleIndex": 3
}
],
"tool": {
Modified: cfe/trunk/test/Analysis/diagnostics/sarif-multi-diagnostic-test.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/diagnostics/sarif-multi-diagnostic-test.c?rev=370061&r1=370060&r2=370061&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/diagnostics/sarif-multi-diagnostic-test.c (original)
+++ cfe/trunk/test/Analysis/diagnostics/sarif-multi-diagnostic-test.c Tue Aug 27 07:20:27 2019
@@ -1,5 +1,7 @@
-// RUN: %clang_analyze_cc1 -analyzer-checker=core,alpha.security.taint,debug.TaintTest %s -verify -analyzer-output=sarif -o - | %normalize_sarif | diff -U1 -b %S/Inputs/expected-sarif/sarif-multi-diagnostic-test.c.sarif -
+// RUN: %clang_analyze_cc1 -analyzer-checker=core,alpha.security.taint,debug.TaintTest,unix.Malloc %s -verify -analyzer-output=sarif -o - | %normalize_sarif | diff -U1 -b %S/Inputs/expected-sarif/sarif-multi-diagnostic-test.c.sarif -
#include "../Inputs/system-header-simulator.h"
+#include "../Inputs/system-header-simulator-for-malloc.h"
+#define ERR -1
int atoi(const char *nptr);
@@ -20,10 +22,19 @@ int h(int i) {
return 0;
}
+int leak(int i) {
+ void *mem = malloc(8);
+ if (i < 4)
+ return ERR; // expected-warning {{Potential leak of memory pointed to by 'mem'}}
+ free(mem);
+ return 0;
+}
+
int main(void) {
f();
g();
h(0);
+ leak(0);
return 0;
}
More information about the cfe-commits
mailing list