SARIF 출력 알아보기
SARIF는 광범위한 정적 분석 도구의 출력을 나타내도록 설계되었으며 SARIF 사양에는 "선택 사항"으로 간주되는 많은 기능이 있습니다. 이 문서에서는 SARIF v2.1.0.csd1 사양에 해당하는 형식 유형 sarifv2.1.0을 사용할 때 생성되는 출력에 대해 자세히 설명합니다. 분석 결과에 대한 파일 형식을 선택하는 방법에 대한 자세한 내용은 데이터베이스 분석하기을(를) 참조하세요.
SARIF 사양 및 스키마
이 문서는 자세한 SARIF 사양과 함께 읽기 위한 것입니다. 사양 및 SARIF 스키마에 대한 자세한 내용은 SARIF 사양 설명서를 참조하세요.
변경 내용 참고
버전 간 변경 내용
| CodeQL 버전 | 형식 유형 | Changes |
|---|---|---|
| 2.0.0 | sarifv2.1.0 | 이 형식의 첫 번째 버전입니다. |
출력의 향후 변경 내용
지정된 특정 형식 유형(예: sarifv2.1.0)에 대해 생성된 출력은 향후 CodeQL 릴리스에서 변경될 수 있습니다. 생성된 SARIF의 소비자와 이전에 생성된 SARIF와의 호환성을 유지하도록 보장함으로써 노력할 것입니다.
-
항상 생성되는 것으로 표시된 필드는 제거되지 않습니다.
-
항상 생성되지 않는 것으로 표시된 필드의 경우 필드가 생성되는 상황이 변경될 수 있습니다. CodeQL SARIF 출력의 소비자는 이러한 필드의 존재 여부에 대해 견고해야 합니다.
새 출력 필드는 동일한 형식 유형으로 향후 릴리스에 추가될 수 있습니다. 이러한 필드는 이전 버전과의 호환성을 손상하는 것으로 간주되지 않으며 소비자는 새로 추가된 필드의 존재에 대해 강력해야 합니다.
새 형식 인수 형식은 새 버전의 SARIF를 지원하기 위해 CodeQL의 향후 버전에 추가될 수 있습니다. 명시적으로 문서화되지 않는 한 이전 버전과의 호환성을 보장하지 않습니다.
생성된 SARIF 개체
특정 상황과 함께 생성될 수 있는 각 SARIF 구성 요소에 대해 자세히 설명합니다. 생성되지 않는 속성은 생략합니다.
`sarifLog` 개체
| JSON 속성 이름 | 항상 생성하시겠습니까? | 비고 |
|---|---|---|
$schema | 옥티콘 "check" aria-label="Always" %} |
[SARIF 스키마](https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/schemas/sarif-schema-2.1.0.json)에 대한 링크를 제공합니다.|
| version| 옥티콘 "check" aria-label="Always" %}| 출력을 생성하는 데 사용되는 SARIF의 버전입니다.|
| runs| 옥티콘 "check" aria-label="Always" %}| 한 언어에 대한 단일 실행 개체를 포함하는 배열입니다.|
`run` 개체
| JSON 속성 이름 | 항상 생성하시겠습니까? | 비고 |
|---|---|---|
tool | 옥티콘 "check" aria-label="Always" %} | None |
artifacts | 옥티콘 "check" aria-label="Always" %} | 결과에서 참조되는 모든 파일에 대해 하나 이상의 아티팩트 개체를 포함하는 배열입니다. |
results | 옥티콘 "check" aria-label="Always" %} | None |
newLineSequences | 옥티콘 "check" aria-label="Always" %} | None |
columnKind | 옥티콘 "check" aria-label="Always" %} | None |
properties | 옥티콘 "check" aria-label="Always" %} | 속성 사전에는 CodeQL CLI에 전달된 형식 지정자를 식별하는 semmle.formatSpecifier가 포함됩니다. |
`tool` 개체
| JSON 속성 이름 | 항상 생성하시겠습니까? | 비고 |
|---|---|---|
driver | 옥티콘 "check" aria-label="Always" %} | None |
`toolComponent` 개체
| JSON 속성 이름 | 항상 생성하시겠습니까? | 비고 |
|---|---|---|
name | 옥티콘 "check" aria-label="Always" %} | CodeQL CLI 도구의 출력에 대해 "CodeQL 명령줄 도구 체인"으로 설정합니다. 다른 도구를 사용하여 출력이 생성된 경우 다른 name이 보고되며 형식은 여기에 설명된 것과 다를 수 있습니다. |
organization | 옥티콘 "check" aria-label="Always" %} | "GitHub"로 설정. |
version | 옥티콘 "check" aria-label="Always" %} | CodeQL 릴리스 버전(예: "2.0.0")으로 설정합니다. |
rules | 옥티콘 "check" aria-label="Always" %} | 규칙을 나타내는 reportingDescriptor 개체의 배열입니다. 이 배열은 최소한 이 분석 중에 실행된 모든 규칙을 포함하지만, 사용할 수 있지만 실행되지 않은 규칙을 포함할 수 있습니다. 쿼리를 사용하도록 설정하는 방법에 대한 자세한 내용은 defaultConfiguration을 참조하세요. |
`reportingDescriptor` 개체(규칙용)
`reportingDescriptor` 개체는 SARIF 사양의 여러 위치에서 사용할 수 있습니다.
`reportingDescriptor`가 `toolComponent` 개체의 규칙 배열에 포함되면 다음과 같은 속성을 갖습니다.
| JSON 속성 이름 | 항상 생성하시겠습니까? | 비고 |
|---|---|---|
id | 옥티콘 "check" aria-label="Always" %} | 일반적으로 @id 형식(예: language/rule-name)인 규칙을 정의하는 쿼리에 지정된 cpp/unsafe-format-string 속성을 포함합니다. 조직에서 쿼리에 @opaqueid 속성을 정의하는 경우 대신 사용됩니다. |
name | 옥티콘 "check" aria-label="Always" %} | 쿼리에 지정된 @id 속성을 포함합니다. 예는 id 속성을 참조하세요. |
shortDescription | 옥티콘 "check" aria-label="Always" %} | 규칙을 정의하는 쿼리에 지정된 @name 속성을 포함합니다. |
fullDescription | 옥티콘 "check" aria-label="Always" %} | 규칙을 정의하는 쿼리에 지정된 @description 속성을 포함합니다. |
defaultConfiguration | 옥티콘 "check" aria-label="Always" %} |
`reportingConfiguration` 개체로서, 사용 가능한 속성이 true 또는 false로 설정되고, 규칙을 정의하는 쿼리에 지정된 `@severity` 속성에 따라 수준 속성이 설정됩니다.
`@severity` 속성이 지정되지 않은 경우 생략됩니다.|
`artifact` 개체
| JSON 속성 이름 | 항상 생성하시겠습니까? | 비고 |
|---|---|---|
location | 옥티콘 "check" aria-label="Always" %} |
`artifactLocation` 개체입니다.|
| index| 옥티콘 "check" aria-label="Always" %}|
artifact 개체의 인덱스입니다.|
| contents| |
--sarif-add-file-contents 플래그를 사용하여 결과가 생성되고 SARIF 파일이 생성될 때 소스 코드를 사용할 수 있는 경우 contents 속성은 artifactContent 속성이 설정된 text 개체로 채워집니다.|
`artifactLocation` 개체
| JSON 속성 이름 | 항상 생성하시겠습니까? | 비고 |
|---|---|---|
uri | 옥티콘 "check" aria-label="Always" %} | None |
index | 옥티콘 "check" aria-label="Always" %} | None |
uriBaseId | 파일이 분석 컴퓨터의 루트 원본 위치와 같은 알려진 추상 위치를 기준으로 하는 경우 이 속성이 설정됩니다. |
`result` 개체
결과의 컴퍼지션은 CodeQL에 제공된 옵션에 따라 달라집니다. 기본적으로 결과는 고유한 메시지 형식 문자열 및 기본 위치별로 그룹화됩니다. 따라서 동일한 기본 메시지를 사용하여 동일한 위치에서 발생하는 두 개의 결과는 출력에 하나의 결과로 표시됩니다. 이 동작은 --ungroup-results 플래그를 사용하여 사용하지 않을 수 있으며, 이 경우 결과가 그룹화되지 않습니다.
| JSON 속성 이름 | 항상 생성하시겠습니까? | 비고 |
|---|---|---|
ruleId | 옥티콘 "check" aria-label="Always" %} |
`id` 개체(규칙용)의 `reportingDescriptor` 속성에 대한 설명을 참조하세요.|
| ruleIndex| 옥티콘 "check" aria-label="Always" %}| None |
| message| 옥티콘 "check" aria-label="Always" %}| 이 위치에서 발생하는 문제를 설명하는 메시지입니다. 이 메시지는 relatedLocations 속성의 위치를 참조하는 링크를 포함하는 SARIF "자리 표시자가 있는 메시지"일 수 있습니다.|
| locations| 옥티콘 "check" aria-label="Always" %}| 하나의 location 개체를 포함하는 배열입니다.|
| partialFingerprints| 옥티콘 "check" aria-label="Always" %}| 이름이 지정된 지문 유형과 지문을 연결하는 사전입니다. 여기에는 최소한 기본 위치의 컨텍스트에 따라 지문을 제공하는 primaryLocationLineHash 값이 포함됩니다.|
| codeFlows| | 이 결과에 대한 규칙을 정의하는 쿼리가 codeFlow인 경우 이 배열은 하나 이상의 @kind path-problem 개체로 채워질 수 있습니다.|
| relatedLocations| | 이 결과에 대한 규칙을 정의하는 쿼리에 자리 표시자 옵션이 있는 메시지가 있는 경우 이 배열이 채워집니다. 각 고유한 위치는 한 번 포함됩니다.|
| suppressions| | 결과가 억제된 경우, @kind 속성이 IN_SOURCE로 설정된 단일 suppression 개체를 포함합니다. 이 결과가 억제되지 않지만, 억제가 있는 결과가 하나 이상 있는 경우에는 빈 배열로 설정되고, 그렇지 않으면 설정되지 않습니다.|
`location` 개체
| JSON 속성 이름 | 항상 생성하시겠습니까? | 비고 |
|---|---|---|
physicalLocation | 옥티콘 "check" aria-label="Always" %} | None |
id |
`location` 개체의 `relatedLocations` 배열에 나타나는 `result` 개체는 `id` 속성을 포함될 수 있습니다.|
| message| |
location 개체는 다음과 같은 경우 message 속성을 포함할 수 있습니다.
- relatedLocations 속성을 포함할 수 있는 result 개체의 message 배열에 나타나는 경우
- threadFlowLocation.location 속성에 나타납니다.|
`physicalLocation` 개체
| JSON 속성 이름 | 항상 생성하시겠습니까? | 비고 |
|---|---|---|
artifactLocation | 옥티콘 "check" aria-label="Always" %} | None |
region | 주어진 physicalLocation이 텍스트 파일(예: 소스 코드 파일)에 있는 경우 region 속성이 있을 수 있습니다. | |
contextRegion | 이 위치에 연결된 snippet이 있는 경우 존재할 수 있습니다. |
`region` 개체
CodeQL에서 생성된 region 개체에는 두 가지 유형이 있습니다.
-
줄/열 오프셋 영역
-
문자 오프셋 및 길이 영역
CodeQL에서 생성된 모든 지역은 어느 형식으로든 지정할 수 있으며 소비자는 두 형식을 강력하게 처리해야 합니다.
줄/열 오프셋 영역의 경우 다음 속성이 설정됩니다.
| JSON 속성 이름 | 항상 생성하시겠습니까? | 비고 |
|---|---|---|
startLine | 옥티콘 "check" aria-label="Always" %} | None |
startColumn | 기본값 1과 같으면 포함되지 않습니다. | |
endLine |
`startLine`과 동일하면 포함되지 않습니다.|
| endColumn| 옥티콘 "check" aria-label="Always" %}| None |
| snippet| | None |
문자 오프셋 및 길이 영역의 경우 다음 속성이 설정됩니다.
| JSON 속성 이름 | 항상 생성하시겠습니까? | 비고 |
|---|---|---|
charOffset |
`startLine`, `startColumn`, `endLine`, 및 `endColumn`이 채워지지 않은 경우 제공됩니다.|
| charLength| |
startLine, startColumn, endLine, 및 endColumn이 채워지지 않은 경우 제공됩니다.|
| snippet| | None |
`codeFlow` 개체
| JSON 속성 이름 | 항상 생성하시겠습니까? | 비고 |
|---|---|---|
threadFlows | 옥티콘 "check" aria-label="Always" %} | None |
`threadFlow` 개체
| JSON 속성 이름 | 항상 생성하시겠습니까? | 비고 |
|---|---|---|
locations | 옥티콘 "check" aria-label="Always" %} | None |
`threadFlowLocation` 개체
| JSON 속성 이름 | 항상 생성하시겠습니까? | 비고 |
|---|---|---|
location | 옥티콘 "check" aria-label="Always" %} | None |