diff options
9 files changed, 72 insertions, 40 deletions
diff --git a/gcc/diagnostic-format-sarif.cc b/gcc/diagnostic-format-sarif.cc index 9d9e7ae..e95f18f 100644 --- a/gcc/diagnostic-format-sarif.cc +++ b/gcc/diagnostic-format-sarif.cc @@ -2221,7 +2221,10 @@ sarif_builder::get_sarif_column (expanded_location exploc) const or return nullptr. If COLUMN_OVERRIDE is non-zero, then use it as the column number - if LOC has no column information. */ + if LOC has no column information. + + We only support text properties of regions ("text regions"), + not binary properties ("binary regions"); see 3.30.1. */ std::unique_ptr<sarif_region> sarif_builder::maybe_make_region_object (location_t loc, @@ -2244,11 +2247,16 @@ sarif_builder::maybe_make_region_object (location_t loc, if (exploc_finish.file !=exploc_caret.file) return nullptr; + /* We can have line == 0 in the presence of "#" lines. + SARIF requires lines > 0, so if we hit this case we don't have a + way of validly representing the region as SARIF; bail out. */ + if (exploc_start.line <= 0) + return nullptr; + auto region_obj = ::make_unique<sarif_region> (); /* "startLine" property (SARIF v2.1.0 section 3.30.5) */ - if (exploc_start.line > 0) - region_obj->set_integer ("startLine", exploc_start.line); + region_obj->set_integer ("startLine", exploc_start.line); /* "startColumn" property (SARIF v2.1.0 section 3.30.6). @@ -2316,11 +2324,16 @@ maybe_make_region_object_for_context (location_t loc, if (exploc_finish.file !=exploc_caret.file) return nullptr; + /* We can have line == 0 in the presence of "#" lines. + SARIF requires lines > 0, so if we hit this case we don't have a + way of validly representing the region as SARIF; bail out. */ + if (exploc_start.line <= 0) + return nullptr; + auto region_obj = ::make_unique<sarif_region> (); /* "startLine" property (SARIF v2.1.0 section 3.30.5) */ - if (exploc_start.line > 0) - region_obj->set_integer ("startLine", exploc_start.line); + region_obj->set_integer ("startLine", exploc_start.line); /* "endLine" property (SARIF v2.1.0 section 3.30.7) */ if (exploc_finish.line != exploc_start.line @@ -2627,7 +2640,7 @@ sarif_builder::make_multiformat_message_string (const char *msg) const return message_obj; } -#define SARIF_SCHEMA "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json" +#define SARIF_SCHEMA "https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/schemas/sarif-schema-2.1.0.json" #define SARIF_VERSION "2.1.0" /* Make a top-level "sarifLog" object (SARIF v2.1.0 section 3.13). */ diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-sarif.py b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-sarif.py index 959e6f2..2c38587 100644 --- a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-sarif.py +++ b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-sarif.py @@ -13,7 +13,7 @@ def sarif(): def test_basics(sarif): schema = sarif['$schema'] - assert schema == "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json" + assert schema == "https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/schemas/sarif-schema-2.1.0.json" version = sarif['version'] assert version == "2.1.0" diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-multithreaded-sarif.py b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-multithreaded-sarif.py index cb00faf..43d40ce 100644 --- a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-multithreaded-sarif.py +++ b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-multithreaded-sarif.py @@ -45,7 +45,7 @@ def sarif(): def test_basics(sarif): schema = sarif['$schema'] - assert schema == "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json" + assert schema == "https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/schemas/sarif-schema-2.1.0.json" version = sarif['version'] assert version == "2.1.0" diff --git a/gcc/testsuite/gcc.dg/sarif-output/test-include-chain-1.py b/gcc/testsuite/gcc.dg/sarif-output/test-include-chain-1.py index 4bb2ebf..87e7627 100644 --- a/gcc/testsuite/gcc.dg/sarif-output/test-include-chain-1.py +++ b/gcc/testsuite/gcc.dg/sarif-output/test-include-chain-1.py @@ -8,7 +8,7 @@ def sarif(): def test_basics(sarif): schema = sarif['$schema'] - assert schema == "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json" + assert schema == "https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/schemas/sarif-schema-2.1.0.json" version = sarif['version'] assert version == "2.1.0" diff --git a/gcc/testsuite/gcc.dg/sarif-output/test-include-chain-2.py b/gcc/testsuite/gcc.dg/sarif-output/test-include-chain-2.py index 843f89a..3671e8d 100644 --- a/gcc/testsuite/gcc.dg/sarif-output/test-include-chain-2.py +++ b/gcc/testsuite/gcc.dg/sarif-output/test-include-chain-2.py @@ -26,7 +26,7 @@ def sarif(): def test_basics(sarif): schema = sarif['$schema'] - assert schema == "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json" + assert schema == "https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/schemas/sarif-schema-2.1.0.json" version = sarif['version'] assert version == "2.1.0" diff --git a/gcc/testsuite/gcc.dg/sarif-output/test-missing-semicolon.py b/gcc/testsuite/gcc.dg/sarif-output/test-missing-semicolon.py index 17759d3..58c0a7d 100644 --- a/gcc/testsuite/gcc.dg/sarif-output/test-missing-semicolon.py +++ b/gcc/testsuite/gcc.dg/sarif-output/test-missing-semicolon.py @@ -8,7 +8,7 @@ def sarif(): def test_basics(sarif): schema = sarif['$schema'] - assert schema == "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json" + assert schema == "https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/schemas/sarif-schema-2.1.0.json" version = sarif['version'] assert version == "2.1.0" diff --git a/gcc/testsuite/gcc.dg/sarif-output/test-no-diagnostics.py b/gcc/testsuite/gcc.dg/sarif-output/test-no-diagnostics.py index f5812df..a3e052f 100644 --- a/gcc/testsuite/gcc.dg/sarif-output/test-no-diagnostics.py +++ b/gcc/testsuite/gcc.dg/sarif-output/test-no-diagnostics.py @@ -8,7 +8,7 @@ def sarif(): def test_basics(sarif): schema = sarif['$schema'] - assert schema == "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json" + assert schema == "https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/schemas/sarif-schema-2.1.0.json" version = sarif['version'] assert version == "2.1.0" diff --git a/gcc/testsuite/gcc.dg/sarif-output/test-werror.py b/gcc/testsuite/gcc.dg/sarif-output/test-werror.py index 99c2c2c..291a26b 100644 --- a/gcc/testsuite/gcc.dg/sarif-output/test-werror.py +++ b/gcc/testsuite/gcc.dg/sarif-output/test-werror.py @@ -8,7 +8,7 @@ def sarif(): def test_basics(sarif): schema = sarif['$schema'] - assert schema == "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json" + assert schema == "https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/schemas/sarif-schema-2.1.0.json" version = sarif['version'] assert version == "2.1.0" diff --git a/gcc/testsuite/lib/sarif-schema-2.1.0.json b/gcc/testsuite/lib/sarif-schema-2.1.0.json index e0b6524..0f58372 100644 --- a/gcc/testsuite/lib/sarif-schema-2.1.0.json +++ b/gcc/testsuite/lib/sarif-schema-2.1.0.json @@ -1,7 +1,7 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", + "$schema": "http://json-schema.org/draft-04/schema#", "title": "Static Analysis Results Format (SARIF) Version 2.1.0 JSON Schema", - "$id": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json", + "id": "https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/schemas/sarif-schema-2.1.0.json", "description": "Static Analysis Results Format (SARIF) Version 2.1.0 JSON Schema: a standard format for the output of static analysis tools.", "additionalProperties": false, "type": "object", @@ -15,12 +15,13 @@ "version": { "description": "The SARIF format version of this log file.", - "enum": [ "2.1.0" ] + "enum": [ "2.1.0" ], + "type": "string" }, "runs": { "description": "The set of runs contained in this log file.", - "type": "array", + "type": [ "array", "null" ], "minItems": 0, "uniqueItems": false, "items": { @@ -181,7 +182,8 @@ "userSpecifiedConfiguration", "toolSpecifiedConfiguration", "debugOutputFile" - ] + ], + "type": "string" } }, @@ -587,17 +589,18 @@ "version": { "description": "The SARIF format version of this external properties object.", - "enum": [ "2.1.0" ] + "enum": [ "2.1.0" ], + "type": "string" }, "guid": { - "description": "A stable, unique identifer for this external properties object, in the form of a GUID.", + "description": "A stable, unique identifier for this external properties object, in the form of a GUID.", "type": "string", "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" }, "runGuid": { - "description": "A stable, unique identifer for the run associated with this external properties object, in the form of a GUID.", + "description": "A stable, unique identifier for the run associated with this external properties object, in the form of a GUID.", "type": "string", "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" }, @@ -778,7 +781,7 @@ }, "guid": { - "description": "A stable, unique identifer for the external property file in the form of a GUID.", + "description": "A stable, unique identifier for the external property file in the form of a GUID.", "type": "string", "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" }, @@ -1563,7 +1566,8 @@ "level": { "description": "A value specifying the severity level of the notification.", "default": "warning", - "enum": [ "none", "note", "warning", "error" ] + "enum": [ "none", "note", "warning", "error" ], + "type": "string" }, "threadId": { @@ -1775,7 +1779,13 @@ "description": "Key/value pairs that provide additional information about the region.", "$ref": "#/definitions/propertyBag" } - } + }, + + "anyOf": [ + { "required": [ "startLine" ] }, + { "required": [ "charOffset" ] }, + { "required": [ "byteOffset" ] } + ] }, "replacement": { @@ -1825,7 +1835,7 @@ }, "guid": { - "description": "A unique identifer for the reporting descriptor in the form of a GUID.", + "description": "A unique identifier for the reporting descriptor in the form of a GUID.", "type": "string", "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" }, @@ -1924,7 +1934,8 @@ "level": { "description": "Specifies the failure level for the report.", "default": "warning", - "enum": [ "none", "note", "warning", "error" ] + "enum": [ "none", "note", "warning", "error" ], + "type": "string" }, "rank": { @@ -2048,13 +2059,15 @@ "kind": { "description": "A value that categorizes results by evaluation state.", "default": "fail", - "enum": [ "notApplicable", "pass", "fail", "review", "open", "informational" ] + "enum": [ "notApplicable", "pass", "fail", "review", "open", "informational" ], + "type": "string" }, "level": { "description": "A value specifying the severity level of the result.", "default": "warning", - "enum": [ "none", "note", "warning", "error" ] + "enum": [ "none", "note", "warning", "error" ], + "type": "string" }, "message": { @@ -2079,7 +2092,7 @@ }, "guid": { - "description": "A stable, unique identifer for the result in the form of a GUID.", + "description": "A stable, unique identifier for the result in the form of a GUID.", "type": "string", "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" }, @@ -2184,7 +2197,8 @@ "unchanged", "updated", "absent" - ] + ], + "type": "string" }, "rank": { @@ -2354,7 +2368,7 @@ "description": "The language of the messages emitted into the log file during this run (expressed as an ISO 639-1 two-letter lowercase culture code) and an optional region (expressed as an ISO 3166-1 two-letter uppercase subculture code associated with a country or region). The casing is recommended but not required (in order for this data to conform to RFC5646).", "type": "string", "default": "en-US", - "pattern": "^[a-zA-Z]{2}|^[a-zA-Z]{2}-[a-zA-Z]{2}]?$" + "pattern": "^[a-zA-Z]{2}(-[a-zA-Z]{2})?$" }, "versionControlProvenance": { @@ -2474,7 +2488,8 @@ "columnKind": { "description": "Specifies the unit in which the tool measures columns.", - "enum": [ "utf16CodeUnits", "unicodeCodePoints" ] + "enum": [ "utf16CodeUnits", "unicodeCodePoints" ], + "type": "string" }, "externalPropertyFileReferences": { @@ -2590,7 +2605,7 @@ }, "guid": { - "description": "A stable, unique identifer for this object's containing run object in the form of a GUID.", + "description": "A stable, unique identifier for this object's containing run object in the form of a GUID.", "type": "string", "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" }, @@ -2702,7 +2717,7 @@ "properties": { "guid": { - "description": "A stable, unique identifer for the suprression in the form of a GUID.", + "description": "A stable, unique identifier for the suprression in the form of a GUID.", "type": "string", "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" }, @@ -2712,7 +2727,8 @@ "enum": [ "inSource", "external" - ] + ], + "type": "string" }, "status": { @@ -2721,7 +2737,8 @@ "accepted", "underReview", "rejected" - ] + ], + "type": "string" }, "justification": { @@ -2874,7 +2891,8 @@ "importance": { "description": "Specifies the importance of this location in understanding the code flow in which it occurs. The order from most to least important is \"essential\", \"important\", \"unimportant\". Default: \"important\".", "enum": [ "important", "essential", "unimportant" ], - "default": "important" + "default": "important", + "type": "string" }, "webRequest": { @@ -2932,7 +2950,7 @@ "properties": { "guid": { - "description": "A unique identifer for the tool component in the form of a GUID.", + "description": "A unique identifier for the tool component in the form of a GUID.", "type": "string", "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$" }, @@ -3060,7 +3078,7 @@ "description": "The language of the messages emitted into the log file during this run (expressed as an ISO 639-1 two-letter lowercase language code) and an optional region (expressed as an ISO 3166-1 two-letter uppercase subculture code associated with a country or region). The casing is recommended but not required (in order for this data to conform to RFC5646).", "type": "string", "default": "en-US", - "pattern": "^[a-zA-Z]{2}|^[a-zA-Z]{2}-[a-zA-Z]{2}]?$" + "pattern": "^[a-zA-Z]{2}(-[a-zA-Z]{2})?$" }, "contents": { @@ -3072,7 +3090,8 @@ "enum": [ "localizedData", "nonLocalizedData" - ] + ], + "type": "string" } }, |