Сведения о выходных данных SARIF
SARIF предназначен для представления выходных данных широкого спектра статических средств анализа, и существует множество функций в спецификации SARIF, которые считаются "необязательными". В этом документе подробно описаны выходные данные, созданные при использовании типа sarifv2.1.0формата, соответствующего спецификации SARIF версии 2.1.0.csd1. Дополнительные сведения о выборе формата файла для результатов анализа см. в разделе анализ базы данных.
Спецификация и схема SARIF
Эта статья предназначена для чтения вместе с подробной спецификацией SARIF. Дополнительные сведения о спецификации и схеме SARIF см. в документации по спецификации SARIF.
Сведения об изменениях
Изменения между версиями
| Версия CodeQL | Тип формата | Изменения | 
|---|---|---|
| 2.0.0 | sarifv2.1.0 | Первая версия этого формата. | 
Будущие изменения выходных данных
Выходные данные, созданные для определенного типа формата (например, sarifv2.1.0), могут измениться в будущих выпусках CodeQL . Мы будем стремиться обеспечить обратную совместимость с потребителями созданного SARIF, гарантируя следующее:
- 
Поля, помеченные как всегда создаваемые, никогда не будут удалены. 
- 
Для полей, помеченных как не всегда создаваемые, обстоятельства, при которых создаются поля, могут измениться. Потребители выходных данных CodeQL SARIF должны быть надежными для присутствия или отсутствия этих полей. 
Новые выходные поля могут быть добавлены в будущих выпусках в том же типе формата. Они не считаются разрывом обратной совместимости, и потребители должны быть надежными в присутствии новых добавленных полей.
Новые типы аргументов формата могут быть добавлены в будущих версиях CodeQL, например для поддержки новых версий SARIF. Они не гарантируют обратную совместимость, если только явно не описаны.
Созданные объекты SARIF
Эти сведения содержат сведения о каждом компоненте SARIF, который может быть создан вместе с любыми конкретными обстоятельствами. Мы опустим все свойства, которые никогда не создаются.
Объект sarifLog.
Объект run.
| Имя свойства JSON | Всегда создается? | Примечания. | 
|---|---|---|
| tool | нет | |
| artifacts | Массив, содержащий по крайней мере один объект артефакта для каждого файла, на который ссылается результат. | |
| results | нет | |
| newLineSequences | нет | |
| columnKind | нет | |
| properties | Словарь свойств будет содержать semmle.formatSpecifierописатель формата, передаваемый в CodeQL CLI. | 
Объект tool.
| Имя свойства JSON | Всегда создается? | Примечания. | 
|---|---|---|
| driver | нет | 
Объект toolComponent.
| Имя свойства JSON | Всегда создается? | Примечания. | 
|---|---|---|
| name | Задайте значение "CodeQL цепочка инструментов командной строки" для выходных данных CodeQL CLI инструментов. Обратите внимание, что если выходные данные были созданы с помощью другого инструмента, сообщается другое name, а формат может быть не так, как описано здесь. | |
| organization | Задайте для параметра GitHub значение GitHub. | |
| version | Задайте для версии выпуска CodeQL, например "2.0.0". | |
| rules | Массив объектов reportingDescriptor, представляющих правила. Этот массив будет содержать как минимум все правила, выполняемые во время этого анализа, но могут содержать правила, которые были доступны, но не выполняются. Дополнительные сведения о включении запросов см. в статьеdefaultConfiguration. | 
reportingDescriptor объект (для правила)
reportingDescriptor объекты могут использоваться в нескольких местах в спецификации SARIF. Если объект reportingDescriptor включен в массив toolComponent правил объекта, он имеет следующие свойства.
| Имя свойства JSON | Всегда создается? | Примечания. | 
|---|---|---|
| id | Будет содержать @idсвойство, указанное в запросе, определяющее правило, которое обычно является форматомlanguage/rule-name(напримерcpp/unsafe-format-string). Если ваша организация определяет@opaqueidсвойство в запросе, оно будет использоваться. | |
| name | Будет содержать свойство, указанное @idв запросе. Пример см. в приведенномidвыше свойстве. | |
| shortDescription | Будет содержать @nameсвойство, указанное в запросе, определяющее правило. | |
| fullDescription | Будет содержать @descriptionсвойство, указанное в запросе, определяющее правило. | |
| defaultConfiguration | reportingConfigurationОбъект с включенным свойством, равным true или false, и свойством@severityуровня, заданным в запросе, определяющим правило. Опущен, если@severityсвойство не указано. | 
Объект artifact.
| Имя свойства JSON | Всегда создается? | Примечания. | 
|---|---|---|
| location | Объект artifactLocation. | |
| index | Индекс объекта artifact. | |
| contents | Если результаты создаются с помощью --sarif-add-file-contentsфлага, и исходный код доступен во время создания ФАЙЛА SARIF,contentsсвойство заполняетсяartifactContentобъектом с наборомtextсвойств. | 
Объект artifactLocation.
| Имя свойства JSON | Всегда создается? | Примечания. | 
|---|---|---|
| uri | нет | |
| index | нет | |
| uriBaseId | Если файл относится к известному абстрактному расположению, например корневому исходному расположению на компьютере анализа, это будет установлено. | 
Объект result.
Состав результатов зависит от параметров, предоставленных CodeQL. По умолчанию результаты группируются по уникальной строке формата сообщений и основному расположению. Таким образом, два результата, происходящие в одном расположении с одинаковым базовым сообщением, будут отображаться в виде одного результата в выходных данных. Это поведение можно отключить с помощью флага --ungroup-results, в котором результаты не группируются.
| Имя свойства JSON | Всегда создается? | Примечания. | 
|---|---|---|
| ruleId | См. описание idсвойства вreportingDescriptorобъекте (для правила). | |
| ruleIndex | нет | |
| message | Сообщение, описывающее проблемы, возникающие в этом расположении. Это сообщение может быть SARIF "Сообщение с заполнителем", содержащее ссылки, ссылающиеся на расположения в свойстве relatedLocations. | |
| locations | Массив, содержащий один locationобъект. | |
| partialFingerprints | Словарь от именованных типов отпечатков до отпечатка. Он будет содержать как минимум значение для primaryLocationLineHash, которое предоставляет отпечаток на основе контекста основного расположения. | |
| codeFlows | Этот массив может быть заполнен одним или несколькими codeFlowобъектами, если запрос, определяющий правило для этого результата@kind path-problem. | |
| relatedLocations | Этот массив будет заполнен, если запрос, определяющий правило для этого результата, содержит сообщение с параметрами заполнителя. Каждое уникальное расположение включается один раз. | |
| suppressions | Если результат подавляется, он будет содержать один suppressionобъект, для@kindсвойства задано значениеIN_SOURCE. Если этот результат не подавляется, но есть хотя бы один результат, имеющий подавление, то этот результат будет установлен на пустой массив, в противном случае он не будет задан. | 
Объект location.
| Имя свойства JSON | Всегда создается? | Примечания. | 
|---|---|---|
| physicalLocation | нет | |
| id | locationОбъекты, отображаемыеrelatedLocationsв массивеresultобъекта, могут содержатьidсвойство. | |
| message | locationОбъекты могут содержать свойство,messageесли:— Они отображаются в relatedLocationsмассивеresultобъекта, может содержатьmessageсвойство.— они отображаются в свойстве threadFlowLocation.location. | 
Объект physicalLocation.
| Имя свойства JSON | Всегда создается? | Примечания. | 
|---|---|---|
| artifactLocation | нет | |
| region | Если данный physicalLocationобъект существует в текстовом файле, например в файле исходного кода,regionто это свойство может присутствовать. | |
| contextRegion | Может присутствовать, если это расположение имеет связанное snippet. | 
Объект region.
Существует два типа объекта, созданных region CodeQL:
- 
Области смещения строк и столбцов 
- 
Области смещения символов и длины 
Любой регион, созданный CodeQL, может быть указан в любом формате, и потребители должны надежно обрабатывать любой тип.
Для регионов смещения строк и столбцов будут заданы следующие свойства:
| Имя свойства JSON | Всегда создается? | Примечания. | 
|---|---|---|
| startLine | нет | |
| startColumn | Не включен, если равно значению по умолчанию 1. | |
| endLine | Не включен, если идентичен startLine. | |
| endColumn | нет | |
| snippet | нет | 
Для областей смещения символов и длины будут заданы следующие свойства:
| Имя свойства JSON | Всегда создается? | Примечания. | 
|---|---|---|
| charOffset | Указано, если startLine``startColumn,endLineиendColumnне заполняются. | |
| charLength | Указано, если startLine``startColumn,endLineиendColumnне заполняются. | |
| snippet | нет | 
Объект codeFlow.
| Имя свойства JSON | Всегда создается? | Примечания. | 
|---|---|---|
| threadFlows | нет | 
Объект threadFlow.
| Имя свойства JSON | Всегда создается? | Примечания. | 
|---|---|---|
| locations | нет | 
Объект threadFlowLocation.
| Имя свойства JSON | Всегда создается? | Примечания. | 
|---|---|---|
| location | Нет |