Fix a SARIF exporter crash with macro expansions

Differential Revision: https://reviews.llvm.org/D65209

llvm-svn: 370061
This commit is contained in:
Joe Ranieri 2019-08-27 14:20:27 +00:00
parent 68a6a28ef8
commit 3385c5cc4d
3 changed files with 153 additions and 25 deletions

View File

@ -219,9 +219,10 @@ static json::Object createThreadFlow(const PathPieces &Pieces,
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 PathDiagnostic &Diag, json::Array &Files,
{"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()}};
}

View File

@ -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": {

View File

@ -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;
}