Skip to main content

Sortie SARIF dans l’interface CLI de CodeQL

Vous pouvez gĂ©nĂ©rer une sortie SARIF Ă  partir de CodeQL CLI et partager des rĂ©sultats d’analyse statique avec d’autres systĂšmes.

Qui peut utiliser cette fonctionnalité ?

CodeQL est disponible pour les types de rĂ©fĂ©rentiels suivants :

À propos de la sortie SARIF

Le format SARIF est conçu pour reprĂ©senter la sortie d’un large Ă©ventail d’outils d’analyse statique et il existe de nombreuses fonctionnalitĂ©s dans la spĂ©cification SARIF considĂ©rĂ©es comme « facultatives Â». Ce document dĂ©crit la sortie produite lors de l’utilisation du type de format sarifv2.1.0, qui correspond Ă  la spĂ©cification SARIF v2.1.0.csd1. Pour plus d’informations sur la sĂ©lection d’un format de fichier pour vos rĂ©sultats d’analyse, consultez database analyze.

Spécification et schéma SARIF

Cet article est destinĂ© Ă  ĂȘtre lu de concert avec la spĂ©cification SARIF dĂ©taillĂ©e. Pour plus d’informations sur la spĂ©cification et le schĂ©ma SARIF, consultez la documentation sur la spĂ©cification SARIF.

Notes sur les modifications

Modifications entre les versions

Version CodeQLType de formatModifications
2.0.0sarifv2.1.0PremiĂšre version de ce format.

Modifications Ă  venir de la sortie

La sortie produite pour un type de format spĂ©cifique donnĂ© (par exemple, sarifv2.1.0) est susceptible d’ĂȘtre modifiĂ©e dans les versions ultĂ©rieures de CodeQL. Nous nous efforcerons de maintenir la compatibilitĂ© descendante avec les consommateurs de la sortie SARIF gĂ©nĂ©rĂ©e en veillant Ă  ceci :

  • Les champs marquĂ©s comme toujours gĂ©nĂ©rĂ©s ne seront jamais supprimĂ©s.

  • Pour les champs marquĂ©s comme n’étant pas toujours gĂ©nĂ©rĂ©s, les circonstances dans lesquelles les champs sont gĂ©nĂ©rĂ©s peuvent changer. Les consommateurs de la sortie SARIF CodeQL devraient rĂ©sister Ă  la prĂ©sence ou Ă  l’absence de ces champs.

De nouveaux champs de sortie pourront ĂȘtre ajoutĂ©s dans les versions ultĂ©rieures sous le mĂȘme type de format : ils ne seront pas considĂ©rĂ©s comme antagonistes Ă  la compatibilitĂ© descendante, et les consommateurs devraient rĂ©sister Ă  la prĂ©sence de champs nouvellement ajoutĂ©s.

De nouveaux types d’arguments de format pourront ĂȘtre ajoutĂ©s dans les versions Ă  venir de CodeQL, par exemple pour prendre en charge les nouvelles versions de SARIF. Ces types n’offrent aucune garantie de compatibilitĂ© descendante, sauf indication explicite contraire.

Objets SARIF générés

Voici des informations dĂ©taillĂ©es sur chaque composant SARIF susceptible d’ĂȘtre gĂ©nĂ©rĂ©, ainsi que toutes les Ă©ventuelles circonstances spĂ©cifiques. Nous omettons toutes les propriĂ©tĂ©s qui ne sont jamais gĂ©nĂ©rĂ©es.

l'objet sarifLog

Nom de la propriété JSONToujours généré ?Remarques
$schemaFournit un lien vers le schéma SARIF.
versionVersion du format SARIF utilisé pour générer la sortie.
runsTableau contenant un objet d’exĂ©cution unique, pour un seul langage.

l'objet run

Nom de la propriété JSONToujours généré ?Remarques
toolNone
artifactsTableau contenant au moins un objet d’artefact pour chaque fichier rĂ©fĂ©rencĂ© dans un rĂ©sultat.
resultsNone
newLineSequencesNone
columnKindNone
propertiesLe dictionnaire des propriĂ©tĂ©s contient le semmle.formatSpecifier, qui identifie le spĂ©cificateur de format passĂ© Ă  l’CodeQL CLI.

l'objet tool

Nom de la propriété JSONToujours généré ?Remarques
driverNone

l'objet toolComponent

Nom de la propriété JSONToujours généré ?Remarques
nameDĂ©finissez ce nom sur « ChaĂźne d’outils en ligne de commande CodeQL Â» pour une sortie provenant des outils CodeQL CLI. Notez que si la sortie a Ă©tĂ© gĂ©nĂ©rĂ©e Ă  l’aide d’un autre outil, une autre propriĂ©tĂ© name est signalĂ©e et le format risque de ne pas ĂȘtre celui dĂ©crit ici.
organizationDĂ©finissez cette propriĂ©tĂ© sur « GitHub Â».
versionDĂ©finissez cette propriĂ©tĂ© sur la version de CodeQL, par exemple « 2.0.0 Â».
rulesTableau d’objets reportingDescriptor qui reprĂ©sentent des rĂšgles. Ce tableau contient au minimum toutes les rĂšgles exĂ©cutĂ©es pendant cette analyse, mais il peut contenir des rĂšgles qui Ă©taient disponibles et qui n’ont pas Ă©tĂ© exĂ©cutĂ©es. Pour plus d’informations sur l’activation des requĂȘtes, consultez defaultConfiguration.

Objet reportingDescriptor (pour une rĂšgle)

Des objets reportingDescriptor peuvent ĂȘtre utilisĂ©s Ă  plusieurs endroits dans la spĂ©cification SARIF. Quand un reportingDescriptor est inclus dans le tableau de rĂšgles d’un objet toolComponent, ses propriĂ©tĂ©s sont les suivantes.

Nom de la propriété JSONToujours généré ?Remarques
idContient la propriĂ©tĂ© @id spĂ©cifiĂ©e dans la requĂȘte qui dĂ©finit la rĂšgle, dont le format est gĂ©nĂ©ralement language/rule-name (par exemple cpp/unsafe-format-string). Si votre organisation dĂ©finit la propriĂ©tĂ© @opaqueid dans la requĂȘte, celle-ci est utilisĂ©e Ă  la place.
nameContient la propriĂ©tĂ© @idspĂ©cifiĂ©e dans la requĂȘte. Pour obtenir un exemple, consultez la propriĂ©tĂ© id ci-dessus.
shortDescriptionContient la propriĂ©tĂ© @name spĂ©cifiĂ©e dans la requĂȘte qui dĂ©finit la rĂšgle.
fullDescriptionContient la propriĂ©tĂ© @description spĂ©cifiĂ©e dans la requĂȘte qui dĂ©finit la rĂšgle.
defaultConfigurationObjet reportingConfiguration, dont la propriĂ©tĂ© activĂ©e est dĂ©finie sur true ou false et dont une propriĂ©tĂ© de niveau est dĂ©finie en fonction de la propriĂ©tĂ© @severity spĂ©cifiĂ©e dans la requĂȘte qui dĂ©finit la rĂšgle. Omis si la propriĂ©tĂ© @severity n’a pas Ă©tĂ© spĂ©cifiĂ©e.

l'objet artifact

Nom de la propriété JSONToujours généré ?Remarques
locationObjet artifactLocation.
indexIndex de l'objet artifact.
contentsSi les rĂ©sultats sont gĂ©nĂ©rĂ©s Ă  l’aide de l’indicateur --sarif-add-file-contents et que le code source est disponible au moment de la gĂ©nĂ©ration du fichier SARIF, alors la propriĂ©tĂ© contents est renseignĂ©e avec un objet artifactContent et avec la propriĂ©tĂ© text dĂ©finie.

l'objet artifactLocation

Nom de la propriété JSONToujours généré ?Remarques
uriNone
indexNone
uriBaseIdSi le fichier est liĂ© Ă  un emplacement abstrait connu, comme l’emplacement source racine sur la machine d’analyse, alors cette propriĂ©tĂ© est dĂ©finie.

l'objet result

La composition des rĂ©sultats dĂ©pend des options fournies Ă  CodeQL. Par dĂ©faut, les rĂ©sultats sont regroupĂ©s par chaĂźne de format de message unique et par emplacement principal. Ainsi, deux rĂ©sultats qui se produisent au mĂȘme emplacement avec le mĂȘme message sous-jacent apparaissent sous la forme d’un rĂ©sultat unique dans la sortie. Ce comportement peut ĂȘtre dĂ©sactivĂ© Ă  l’aide de l’indicateur --ungroup-results, auquel cas aucun rĂ©sultat n’est regroupĂ©.

Nom de la propriété JSONToujours généré ?Remarques
ruleIdConsultez la description de la propriĂ©tĂ© id dans l’objet reportingDescriptor (pour la rĂšgle).
ruleIndexNone
messageMessage dĂ©crivant le ou les problĂšmes qui se produisent Ă  cet emplacement. Ce message peut ĂȘtre un « message avec espace rĂ©servĂ© Â» au format SARIF, contenant des liens qui font rĂ©fĂ©rence Ă  des emplacements dans la propriĂ©tĂ© relatedLocations.
locationsTableau contenant un objet location unique.
partialFingerprintsIl existe un dictionnaire des types d’empreintes digitales nommĂ©es. Celui-ci contient, au minimum, une valeur pour primaryLocationLineHash, qui fournit une empreinte digitale selon le contexte de l’emplacement principal.
codeFlowsCe tableau peut ĂȘtre renseignĂ© avec un ou plusieurs objets codeFlow si la requĂȘte qui dĂ©finit la rĂšgle pour ce rĂ©sultat est de @kind path-problem.
relatedLocationsCe tableau est renseignĂ© si la requĂȘte qui dĂ©finit la rĂšgle pour ce rĂ©sultat a un message avec des options d’espace rĂ©servĂ©. Chaque emplacement unique est inclus une seule fois.
suppressionsSi le rĂ©sultat est supprimĂ©, alors il contient un seul objet suppression, avec la propriĂ©tĂ© @kind dĂ©finie sur IN_SOURCE. Si ce rĂ©sultat n’est pas supprimĂ©, mais qu’au moins un rĂ©sultat fait l’objet d’une suppression, alors il est dĂ©fini sur un tableau vide ; sinon, il n’est pas dĂ©fini.

l'objet location

Nom de la propriété JSONToujours généré ?Remarques
physicalLocationNone
idLes objets location qui apparaissent dans le tableau relatedLocations d’un objet result peuvent contenir la propriĂ©tĂ© id.
messageLes objets location peuvent contenir la propriĂ©tĂ© message si :

– Ils apparaissent dans le tableau relatedLocations d’un objet result pouvant contenir la propriĂ©tĂ© message.

– Ils apparaissent dans la propriĂ©tĂ© threadFlowLocation.location.

l'objet physicalLocation

Nom de la propriété JSONToujours généré ?Remarques
artifactLocationNone
regionSi le physicalLocation donnĂ© existe dans un fichier texte, comme un fichier de code source, alors la propriĂ©tĂ© region est peut-ĂȘtre prĂ©sente.
contextRegionÉventuellement prĂ©sente si cet emplacement a un snippet associĂ©.

l'objet region

Il existe deux types d’objets region produits par CodeQL :

  • RĂ©gions de dĂ©calage de ligne/colonne

  • RĂ©gions de longueur et de dĂ©calage de caractĂšres

Toute rĂ©gion produite par CodeQL peut ĂȘtre spĂ©cifiĂ©e dans l’un ou l’autre format, et les consommateurs doivent gĂ©rer l’un ou l’autre type de maniĂšre robuste.

Pour les rĂ©gions de dĂ©calage de ligne/colonne, les propriĂ©tĂ©s suivantes sont dĂ©finies :

Nom de la propriété JSONToujours généré ?Remarques
startLineNone
startColumnNon incluse si elle est égale à la valeur par défaut de 1.
endLineNon incluse si identique Ă  startLine.
endColumnNone
snippetNone

Pour les rĂ©gions de longueur et de dĂ©calage de caractĂšres, les propriĂ©tĂ©s suivantes sont dĂ©finies :

Nom de la propriété JSONToujours généré ?Remarques
charOffsetFournie si les propriétés startLine, startColumn, endLine et endColumn ne sont pas renseignées.
charLengthFournie si les propriétés startLine, startColumn, endLine et endColumn ne sont pas renseignées.
snippetNone

l'objet codeFlow

Nom de la propriété JSONToujours généré ?Remarques
threadFlowsNone

l'objet threadFlow

Nom de la propriété JSONToujours généré ?Remarques
locationsNone

l'objet threadFlowLocation

Nom de la propriété JSONToujours généré ?Remarques
locationNone