GitHub présente CodeQL 2.27.3 : syntaxe Python 3.15 et extensions de données JSON, mais un graphe de flot Actions partagé peut casser des requêtes personnalisées, et la version date du 20 octobre

Published · AI Daily — AI-assisted deep research, methodology & disclosure

Le 3 novembre 2026, GitHub a présenté CodeQL 2.27.3 : syntaxe Python 3.15 (plus unaire dans les motifs littéraux, identifiants Unicode 17) et objets natifs frozendict et sentinel, extensions de données écrites en JSON, modèle de menace « ai » optionnel sans source intégrée, entiers de précision binaire du C23 et plusieurs réductions de faux positifs. Les notes complètes donnent deux changements cassants : autobuild et manual build des langages compilés ne sont pas pris en charge sous macOS 27 avec tout Xcode ou macOS 26 avec Xcode 27 ; le graphe de flot de contrôle de GitHub Actions passe à la bibliothèque CFG partagée, et les requêtes concernées peuvent nécessiter une mise à jour. Les anciennes classes Completion sont supprimées. Les notes de version datent la 2.27.3 du 20 octobre et listent déjà la 2.27.4 au 2 novembre. L'article ne donne aucun taux de faux positifs mesuré.

Le 3 novembre 2026, GitHub a publié un article de son journal des modifications sur CodeQL 2.27.3, le moteur d'analyse statique derrière l'analyse de code de GitHub. L'article indique que cette version prend en charge de nouvelles fonctions du langage Python 3.15, ajoute une syntaxe JSON pour les extensions de données, ajoute les entiers de précision binaire du C23 et améliore la précision dans plusieurs langages. Une date demande de la prudence : les notes de version de CodeQL donnent la version 2.27.3 comme publiée le 20 octobre 2026, et la même page liste déjà la 2.27.4 datée du 2 novembre. L'article du 3 novembre décrit donc une version vieille d'environ deux semaines, et un correctif plus récent existe.

Pour la ligne de commande, les fichiers d'extension de données peuvent désormais être écrits en JSON, avec la même structure que la forme YAML, et les commentaires de style Java sont permis. Les fichiers d'extension .json sont analysés comme du JSON et tous les autres restent analysés comme du YAML. C'est utile aux équipes qui produisent des fichiers d'extension avec d'autres outils, car le JSON est plus facile à générer et à vérifier par machine. La version ajoute aussi un modèle de menace « ai » optionnel pour les données générées par des LLM. Il n'a aucun modèle de source intégré : une équipe qui veut qu'il trouve quelque chose doit définir ses propres sources avec des extensions de données.

Pour Python, l'extracteur accepte la syntaxe de Python 3.15, y compris le plus unaire dans les motifs littéraux de match et les identifiants Unicode 17. CodeQL prend aussi en charge les nouveaux objets natifs frozendict et sentinel, avec une modélisation du flux de données pour la construction d'un frozendict. Les notes de version complètes listent plus de choses que l'article, comme le flux de taint pour le nouvel itérateur de graphèmes d'unicodedata et pour de nouvelles fonctions d'encodage de binascii. Prendre en charge une nouvelle syntaxe signifie que le code peut être analysé ; cela ne veut pas dire que chaque requête a été ajustée aux nouvelles écritures.

Les autres langages reçoivent des changements plus modestes. C et C++ gagnent la prise en charge des types _BitInt(N) du C23 et des résumés de flux pour certaines classes de messages BlazingMQ. C# gagne le flux de données à travers les motifs positionnels dans les expressions is et les cas de switch, et transmet les variables d'environnement de proxy et de certificat à l'outil en ligne de commande NuGet quand des registres privés sont configurés. Ruby traite les sous-accesseurs de requête de Grape::API, comme params, cookies, body.read et env, comme des sources de flux distantes. Ces ajouts peuvent changer les résultats : une nouvelle source distante peut produire de nouvelles alertes sur du code jusque-là propre.

Plusieurs requêtes ont été ajustées pour réduire les faux positifs. La requête C++ cpp/resource-not-released-in-destructor reconnaît désormais les ressources libérées via des alias locaux. La requête C# cs/simplifiable-boolean-expression est plus silencieuse quand les informations de type sont incomplètes. Les requêtes SSRF et de redirection non validée pour Java et Kotlin reconnaissent maintenant les comparaisons insensibles à la casse entre l'hôte de l'URI et une liste d'autorisation fixe, y compris quand l'hôte est dans une variable locale. En Python, les requêtes py/xxe, py/xml-bomb et py/nosql-injection respectent maintenant le modèle de menace configuré pour choisir les sources non fiables, utilisent toujours par défaut les sources distantes, et incluent aussi les sources modélisées par extensions de données. Ce dernier changement peut ajouter des alertes pour les équipes qui modélisent déjà des sources locales.

Les notes complètes signalent aussi un changement cassant de la CLI : autobuild et manual build des langages compilés ne sont pas pris en charge sous macOS 27 avec toute version de Xcode, ni sous macOS 26 avec Xcode 27. Un autre changement cassant concerne l'analyse de GitHub Actions. Le graphe de flot de contrôle d'Actions utilise désormais la bibliothèque CFG partagée, de sorte que les requêtes personnalisées qui dépendent de nœuds, d'arêtes ou de limites de blocs de base particuliers peuvent devoir être mises à jour. Les anciennes classes Completion sont supprimées, et les auteurs doivent utiliser des étiquettes d'arête comme DirectSuccessor, BooleanSuccessor et ReturnSuccessor. GitHub indique que chaque nouvelle version de CodeQL est déployée automatiquement dans l'analyse de code sur github.com, que ces fonctions seront dans la version 3.24 de GitHub Enterprise Server, et que les utilisateurs d'un GHES plus ancien peuvent mettre CodeQL à jour manuellement. L'article ne donne pas de taux de faux positifs mesurés ; les équipes devraient donc relancer des analyses sur une branche et comparer les alertes avant de voir ces changements comme de pures améliorations.

Sources

FAQ

Quel changement de CodeQL 2.27.3 peut casser des requêtes existantes ?

Le graphe de flot de contrôle de GitHub Actions utilise désormais la bibliothèque CFG partagée. Les requêtes personnalisées qui dépendent de nœuds, d'arêtes ou de limites de blocs précis peuvent devoir être mises à jour, et les anciennes classes Completion sont supprimées : utilisez des étiquettes d'arête comme DirectSuccessor, BooleanSuccessor et ReturnSuccessor.

La prise en charge de Python 3.15 signifie-t-elle que toutes les requêtes sont adaptées ?

Non. L'article dit que l'extracteur sait analyser la nouvelle syntaxe et modélise des objets natifs comme frozendict et sentinel, donc le code peut être analysé. Il ne dit pas que chaque requête a été ajustée aux nouvelles écritures, et ne donne aucun taux de faux positifs ou de détection : comparez les alertes sur une branche après la mise à jour.

Quand cette version a-t-elle réellement été publiée ?

L'article de GitHub est daté du 3 novembre 2026 et parle d'une publication récente. Les notes de version de CodeQL datent pourtant la 2.27.3 du 20 octobre 2026, et la même page liste déjà la 2.27.4 au 2 novembre. Il s'agit donc d'une version d'environ deux semaines, et un correctif plus récent existe.