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