Skip to main content

CodeQL CLI SARIF ์ถœ๋ ฅ

CodeQL CLI์—์„œ SARIF๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์ •์  ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ๊ณผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ฐ€ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

CodeQL์€(๋Š”) ๋‹ค์Œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์œ ํ˜•์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • GitHub.com์˜ ํผ๋ธ”๋ฆญ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ, GitHub CodeQL ์‚ฌ์šฉ ์•ฝ๊ด€ ์ฐธ์กฐ
  • GitHub Code Security๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •๋œ GitHub Team์˜ ์กฐ์ง ์†Œ์œ  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ

SARIF ์ถœ๋ ฅ ์•Œ์•„๋ณด๊ธฐ

SARIF๋Š” ๊ด‘๋ฒ”์œ„ํ•œ ์ •์  ๋ถ„์„ ๋„๊ตฌ์˜ ์ถœ๋ ฅ์„ ๋‚˜ํƒ€๋‚ด๋„๋ก ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ SARIF ์‚ฌ์–‘์—๋Š” "์„ ํƒ ์‚ฌํ•ญ"์œผ๋กœ ๊ฐ„์ฃผ๋˜๋Š” ๋งŽ์€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ์—์„œ๋Š” SARIF v2.1.0.csd1 ์‚ฌ์–‘์— ํ•ด๋‹นํ•˜๋Š” ํ˜•์‹ ์œ ํ˜• sarifv2.1.0์„ ์‚ฌ์šฉํ•  ๋•Œ ์ƒ์„ฑ๋˜๋Š” ์ถœ๋ ฅ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋ถ„์„ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ํŒŒ์ผ ํ˜•์‹์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ„์„์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

SARIF ์‚ฌ์–‘ ๋ฐ ์Šคํ‚ค๋งˆ

์ด ๋ฌธ์„œ๋Š” ์ž์„ธํ•œ SARIF ์‚ฌ์–‘๊ณผ ํ•จ๊ป˜ ์ฝ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์–‘ ๋ฐ SARIF ์Šคํ‚ค๋งˆ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ SARIF ์‚ฌ์–‘ ์„ค๋ช…์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ณ€๊ฒฝ ๋‚ด์šฉ ์ฐธ๊ณ 

๋ฒ„์ „ ๊ฐ„ ๋ณ€๊ฒฝ ๋‚ด์šฉ

CodeQL ๋ฒ„์ „ํ˜•์‹ ์œ ํ˜•๋ณ€๊ฒฝ
2.0.0sarifv2.1.0์ด ํ˜•์‹์˜ ์ฒซ ๋ฒˆ์งธ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

์ถœ๋ ฅ์˜ ํ–ฅํ›„ ๋ณ€๊ฒฝ ๋‚ด์šฉ

์ง€์ •๋œ ํŠน์ • ํ˜•์‹ ์œ ํ˜•(์˜ˆ: sarifv2.1.0)์— ๋Œ€ํ•ด ์ƒ์„ฑ๋œ ์ถœ๋ ฅ์€ ํ–ฅํ›„ CodeQL ๋ฆด๋ฆฌ์Šค์—์„œ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ SARIF์˜ ์†Œ๋น„์ž์™€ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ํ•ญ์ƒ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋œ ํ•„๋“œ๋Š” ์ œ๊ฑฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ํ•ญ์ƒ ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋œ ํ•„๋“œ์˜ ๊ฒฝ์šฐ ํ•„๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์ƒํ™ฉ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CodeQL SARIF ์ถœ๋ ฅ์˜ ์†Œ๋น„์ž๋Š” ์ด๋Ÿฌํ•œ ํ•„๋“œ์˜ ์กด์žฌ ๋˜๋Š” ๋ถ€์žฌ์— ๋Œ€ํ•ด ๊ฐ•๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ ์ถœ๋ ฅ ํ•„๋“œ๋Š” ๋™์ผํ•œ ํ˜•์‹ ์œ ํ˜•์œผ๋กœ ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์— ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ•„๋“œ๋Š” ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์†์ƒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜์ง€ ์•Š์œผ๋ฉฐ ์†Œ๋น„์ž๋Š” ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ํ•„๋“œ์˜ ์กด์žฌ์— ๋Œ€ํ•ด ๊ฐ•๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ ํ˜•์‹ ์ธ์ˆ˜ ํ˜•์‹์€ ์ƒˆ ๋ฒ„์ „์˜ SARIF๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด CodeQL์˜ ํ–ฅํ›„ ๋ฒ„์ „์— ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช…์‹œ์ ์œผ๋กœ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š๋Š” ํ•œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ƒ์„ฑ๋œ SARIF ๊ฐœ์ฒด

ํŠน์ • ์ƒํ™ฉ๊ณผ ํ•จ๊ป˜ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ SARIF ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š” ์†์„ฑ์€ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.

sarifLog ๊ฐœ์ฒด

JSON ์†์„ฑ ์ด๋ฆ„ํ•ญ์ƒ ์ƒ์„ฑํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?์ฃผ์˜
$schemaSARIF ์Šคํ‚ค๋งˆ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
version์ถœ๋ ฅ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” SARIF์˜ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.
runsํ•œ ์–ธ์–ด์— ๋Œ€ํ•œ ๋‹จ์ผ ์‹คํ–‰ ๊ฐœ์ฒด๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.

run ๊ฐœ์ฒด

JSON ์†์„ฑ ์ด๋ฆ„ํ•ญ์ƒ ์ƒ์„ฑํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?์ฃผ์˜
toolNone
artifacts๊ฒฐ๊ณผ์—์„œ ์ฐธ์กฐ๋˜๋Š” ๋ชจ๋“  ํŒŒ์ผ์— ๋Œ€ํ•ด ํ•˜๋‚˜ ์ด์ƒ์˜ ์•„ํ‹ฐํŒฉํŠธ ๊ฐœ์ฒด๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
resultsNone
newLineSequencesNone
columnKindNone
properties์†์„ฑ ์‚ฌ์ „์—๋Š” CodeQL CLI์— ์ „๋‹ฌ๋œ ํ˜•์‹ ์ง€์ •์ž๋ฅผ ์‹๋ณ„ํ•˜๋Š” semmle.formatSpecifier๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

tool ๊ฐœ์ฒด

JSON ์†์„ฑ ์ด๋ฆ„ํ•ญ์ƒ ์ƒ์„ฑํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?์ฃผ์˜
driverNone

toolComponent ๊ฐœ์ฒด

JSON ์†์„ฑ ์ด๋ฆ„ํ•ญ์ƒ ์ƒ์„ฑํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?์ฃผ์˜
nameCodeQL CLI ๋„๊ตฌ์˜ ์ถœ๋ ฅ์— ๋Œ€ํ•ด "CodeQL ๋ช…๋ น์ค„ ๋„๊ตฌ ์ฒด์ธ"์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถœ๋ ฅ์ด ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ ๋‹ค๋ฅธ name์ด ๋ณด๊ณ ๋˜๋ฉฐ ํ˜•์‹์€ ์—ฌ๊ธฐ์— ์„ค๋ช…๋œ ๊ฒƒ๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
organization"GitHub"๋กœ ์„ค์ •.
versionCodeQL ๋ฆด๋ฆฌ์Šค ๋ฒ„์ „(์˜ˆ: "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 ์†์„ฑ ์ด๋ฆ„ํ•ญ์ƒ ์ƒ์„ฑํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?์ฃผ์˜
locationartifactLocation ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค.
indexartifact ๊ฐœ์ฒด์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค.
contents--sarif-add-file-contents ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  SARIF ํŒŒ์ผ์ด ์ƒ์„ฑ๋  ๋•Œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ contents ์†์„ฑ์€ text ์†์„ฑ์ด ์„ค์ •๋œ artifactContent ๊ฐœ์ฒด๋กœ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.

artifactLocation ๊ฐœ์ฒด

JSON ์†์„ฑ ์ด๋ฆ„ํ•ญ์ƒ ์ƒ์„ฑํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?์ฃผ์˜
uriNone
indexNone
uriBaseIdํŒŒ์ผ์ด ๋ถ„์„ ์ปดํ“จํ„ฐ์˜ ๋ฃจํŠธ ์›๋ณธ ์œ„์น˜์™€ ๊ฐ™์€ ์•Œ๋ ค์ง„ ์ถ”์ƒ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด ์†์„ฑ์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

result ๊ฐœ์ฒด

๊ฒฐ๊ณผ์˜ ์ปดํผ์ง€์…˜์€ CodeQL์— ์ œ๊ณต๋œ ์˜ต์…˜์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฒฐ๊ณผ๋Š” ๊ณ ์œ ํ•œ ๋ฉ”์‹œ์ง€ ํ˜•์‹ ๋ฌธ์ž์—ด ๋ฐ ๊ธฐ๋ณธ ์œ„์น˜๋ณ„๋กœ ๊ทธ๋ฃนํ™”๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋™์ผํ•œ ๊ธฐ๋ณธ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ์œ„์น˜์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋‘ ๊ฐœ์˜ ๊ฒฐ๊ณผ๋Š” ์ถœ๋ ฅ์— ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด ๋™์ž‘์€ --ungroup-results ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๊ฐ€ ๊ทธ๋ฃนํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

JSON ์†์„ฑ ์ด๋ฆ„ํ•ญ์ƒ ์ƒ์„ฑํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?์ฃผ์˜
ruleIdreportingDescriptor ๊ฐœ์ฒด(๊ทœ์น™์šฉ)์˜ id ์†์„ฑ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ฐธ์กฐํ•˜์„ธ์š”.
ruleIndexNone
message์ด ์œ„์น˜์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค. ์ด ๋ฉ”์‹œ์ง€๋Š” relatedLocations ์†์„ฑ์˜ ์œ„์น˜๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋งํฌ๋ฅผ ํฌํ•จํ•˜๋Š” SARIF "์ž๋ฆฌ ํ‘œ์‹œ์ž๊ฐ€ ์žˆ๋Š” ๋ฉ”์‹œ์ง€"์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
locationsํ•˜๋‚˜์˜ location ๊ฐœ์ฒด๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
partialFingerprints์ด๋ฆ„์ด ์ง€์ •๋œ ์ง€๋ฌธ ์œ ํ˜•์—์„œ ์ง€๋ฌธ๊นŒ์ง€ ์‚ฌ์ „์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์ตœ์†Œํ•œ ๊ธฐ๋ณธ ์œ„์น˜์˜ ์ปจํ…์ŠคํŠธ์— ๋”ฐ๋ผ ์ง€๋ฌธ์„ ์ œ๊ณตํ•˜๋Š” primaryLocationLineHash ๊ฐ’์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
codeFlows์ด ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ๊ทœ์น™์„ ์ •์˜ํ•˜๋Š” ์ฟผ๋ฆฌ๊ฐ€ @kind path-problem์ธ ๊ฒฝ์šฐ ์ด ๋ฐฐ์—ด์€ ํ•˜๋‚˜ ์ด์ƒ์˜ codeFlow ๊ฐœ์ฒด๋กœ ์ฑ„์›Œ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
relatedLocations์ด ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ๊ทœ์น™์„ ์ •์˜ํ•˜๋Š” ์ฟผ๋ฆฌ์— ์ž๋ฆฌ ํ‘œ์‹œ์ž ์˜ต์…˜์ด ์žˆ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด ๋ฐฐ์—ด์ด ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค. ๊ฐ ๊ณ ์œ ํ•œ ์œ„์น˜๋Š” ํ•œ ๋ฒˆ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
suppressions๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉด @kind ์†์„ฑ์ด IN_SOURCE๋กœ ์„ค์ •๋œ ํ•˜๋‚˜์˜ suppression ๊ฐœ์ฒด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋˜์ง€๋งŒ ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ๊ฒฐ๊ณผ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๋นˆ ๋ฐฐ์—ด๋กœ ์„ค์ •๋˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์„ค์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

location ๊ฐœ์ฒด

JSON ์†์„ฑ ์ด๋ฆ„ํ•ญ์ƒ ์ƒ์„ฑํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?์ฃผ์˜
physicalLocationNone
idresult ๊ฐœ์ฒด์˜ relatedLocations ๋ฐฐ์—ด์— ๋‚˜ํƒ€๋‚˜๋Š” location ๊ฐœ์ฒด๋Š” id ์†์„ฑ์„ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
messagelocation ๊ฐœ์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ message ์†์„ฑ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

- message ์†์„ฑ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” result ๊ฐœ์ฒด์˜ relatedLocations ๋ฐฐ์—ด์— ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒฝ์šฐ

- threadFlowLocation.location ์†์„ฑ์— ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒฝ์šฐ

physicalLocation ๊ฐœ์ฒด

JSON ์†์„ฑ ์ด๋ฆ„ํ•ญ์ƒ ์ƒ์„ฑํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?์ฃผ์˜
artifactLocationNone
region์ฃผ์–ด์ง„ physicalLocation์ด ํ…์ŠคํŠธ ํŒŒ์ผ(์˜ˆ: ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ)์— ์žˆ๋Š” ๊ฒฝ์šฐ region ์†์„ฑ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
contextRegion์ด ์œ„์น˜์— ์—ฐ๊ฒฐ๋œ snippet์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

region ๊ฐœ์ฒด

CodeQL์—์„œ ์ƒ์„ฑ๋œ region ๊ฐœ์ฒด์—๋Š” ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ค„/์—ด ์˜คํ”„์…‹ ์˜์—ญ

  • ๋ฌธ์ž ์˜คํ”„์…‹ ๋ฐ ๊ธธ์ด ์˜์—ญ

CodeQL์—์„œ ์ƒ์„ฑ๋œ ๋ชจ๋“  ์ง€์—ญ์€ ์–ด๋А ํ˜•์‹์œผ๋กœ๋“  ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์†Œ๋น„์ž๋Š” ๋‘ ํ˜•์‹์„ ๊ฐ•๋ ฅํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ค„/์—ด ์˜คํ”„์…‹ ์˜์—ญ์˜ ๊ฒฝ์šฐ ๋‹ค์Œ ์†์„ฑ์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

JSON ์†์„ฑ ์ด๋ฆ„ํ•ญ์ƒ ์ƒ์„ฑํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?์ฃผ์˜
startLineNone
startColumn๊ธฐ๋ณธ๊ฐ’ 1๊ณผ ๊ฐ™์œผ๋ฉด ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
endLinestartLine๊ณผ ๋™์ผํ•˜๋ฉด ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
endColumnNone
snippetNone

๋ฌธ์ž ์˜คํ”„์…‹ ๋ฐ ๊ธธ์ด ์˜์—ญ์˜ ๊ฒฝ์šฐ ๋‹ค์Œ ์†์„ฑ์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

JSON ์†์„ฑ ์ด๋ฆ„ํ•ญ์ƒ ์ƒ์„ฑํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?์ฃผ์˜
charOffsetstartLine, startColumn, endLine, ๋ฐ endColumn์ด ์ฑ„์›Œ์ง€์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
charLengthstartLine, startColumn, endLine, ๋ฐ endColumn์ด ์ฑ„์›Œ์ง€์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
snippetNone

codeFlow ๊ฐœ์ฒด

JSON ์†์„ฑ ์ด๋ฆ„ํ•ญ์ƒ ์ƒ์„ฑํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?์ฃผ์˜
threadFlowsNone

threadFlow ๊ฐœ์ฒด

JSON ์†์„ฑ ์ด๋ฆ„ํ•ญ์ƒ ์ƒ์„ฑํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?์ฃผ์˜
locationsNone

threadFlowLocation ๊ฐœ์ฒด

JSON ์†์„ฑ ์ด๋ฆ„ํ•ญ์ƒ ์ƒ์„ฑํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?์ฃผ์˜
location์—†์Œ