CodeQL 2.27.4 (2026-11-02)¶
This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the code scanning section on the GitHub blog, relevant GitHub Changelog updates, changes in the CodeQL extension for Visual Studio Code, and the CodeQL Action changelog.
Security Coverage¶
CodeQL 2.27.4 runs a total of 498 security queries when configured with the Default suite (covering 169 CWE). The Extended suite enables an additional 131 queries (covering 32 more CWE).
CodeQL CLI¶
Bug Fixes¶
The CodeQL CLI now writes messages from the Java virtual machine, such as warnings and initialization errors, to standard error instead of standard output. Previously, these messages could corrupt the output of commands that print JSON or other machine-readable output.
Security Updates¶
codeql pack bundleandcodeql pack publishnow check that each file added to the pack archive is still inside the pack root after symbolic links are resolved. Files that resolve to a location outside the pack root are omitted from the archive with a warning.
Query Packs¶
Minor Analysis Improvements¶
C/C++¶
The
cpp/suspicious-pointer-scalingquery no longer reports false positives for intentional pointer arithmetic fromstd::byte*buffers.The
cpp/unused-local-variableandcpp/unused-static-variablequeries no longer report variables marked with the C++17[[maybe_unused]]attribute.
JavaScript/TypeScript¶
The
js/invalid-prototype-valuequery no longer reports computed__proto__properties in object literals.
Query Metadata Changes¶
C/C++¶
Added a new
cpp-code-qualityquery suite containing queries that identify maintainability and reliability issues in C and C++ code.
C#¶
The
external/cwe/cwe-730tag has been removed fromcs/redosandcs/regex-injection, because MITRE has marked CWE-730 as prohibited for vulnerability mapping. The queries retain their other CWE tags.
Java/Kotlin¶
The
external/cwe/cwe-730tag has been removed fromjava/redos,java/polynomial-redosandjava/regex-injection, because MITRE has marked CWE-730 as prohibited for vulnerability mapping. The queries retain their other CWE tags.
JavaScript/TypeScript¶
The
external/cwe/cwe-730tag has been removed fromjs/redos,js/polynomial-redos,js/regex-injection,js/regex-injection-more-sources,js/server-crashandjs/loop-bound-injection, because MITRE has marked CWE-730 as prohibited for vulnerability mapping. The queries retain their other CWE tags.
Python¶
The
external/cwe/cwe-730tag has been removed frompy/redos,py/polynomial-redosandpy/regex-injection, because MITRE has marked CWE-730 as prohibited for vulnerability mapping. The queries retain their other CWE tags.
Ruby¶
The
external/cwe/cwe-730tag has been removed fromrb/redos,rb/polynomial-redosandrb/regexp-injection, because MITRE has marked CWE-730 as prohibited for vulnerability mapping. The queries retain their other CWE tags.
Swift¶
The
external/cwe/cwe-730tag has been removed fromswift/redosandswift/regex-injection, because MITRE has marked CWE-730 as prohibited for vulnerability mapping. The queries retain their other CWE tags.
Language Libraries¶
Bug Fixes¶
Golang¶
The Go extractor no longer modifies the global Git configuration when private
git_sourceregistries are configured. The registry proxy certificate is now passed to Git through theGIT_SSL_CAINFOenvironment variable instead, which only affects the Git processes spawned bygo.
Breaking Changes¶
JavaScript/TypeScript¶
The
SEMMLE_TYPESCRIPT_HOMEenvironment variable is no longer supported. The JavaScript/TypeScript extractor now ignores the environment variable and always uses its bundled TypeScript compiler.
Minor Analysis Improvements¶
C#¶
Rolled back the change that set proxy and certificate environment variables for the subprocess that invokes the NuGet CLI because the environment variables were only partially respected by the target process in some cases.
Java/Kotlin¶
The
java/log-injectionquery now recognizes additional sanitizers and sanitizer guards from the JDK, Apache Commons Lang and Text, Guava, OWASP Java Encoder, and Spring Framework.Queries that use path-injection sanitizers now recognize additional substring guards and string replacement and removal operations from Apache Commons Lang and Guava.
JavaScript/TypeScript¶
Added taint steps for
String.prototype.trimStart,trimEnd, andnormalize.Fixed the flow summary for
Array.prototype.flatMap. ThethisArgargument now flows to the callback’sthisinstead of its index parameter.
Rust¶
The early return taken by the
?operator no longer makes the unwrapped value ofx?flow out of the enclosing function. This fixes false positive results from queries such asrust/cleartext-logging, where a sensitive value read with?was reported as part of an unrelated return value.Added neutral models to inhibit spurious generated sink models for
actix_web::HttpRequest::connection_infoand the methods built on it, such asfull_urlandurl_for. This fixes some false positive results from queries such asrust/uncontrolled-allocation-sizeandrust/log-injection.Added neutral models to inhibit spurious generated sink models for
VecandVecDequemethods such asinsert,removeandpush_back. This fixes some false positive results from queries such asrust/cleartext-logging.
Deprecated APIs¶
Golang¶
ControlFlow::ConditionGuardNodeis now deprecated. Use the API fromsemmle.go.controlflow.Guardsinstead.
New Features¶
C/C++¶
Added support for the
__builtin_lt_synthesizes_from_spaceship,__builtin_gt_synthesizes_from_spaceship,__builtin_le_synthesizes_from_spaceship,__builtin_ge_synthesizes_from_spaceship,__builtin_is_implicit_lifetime,__builtin_is_structural, and__builtin_is_virtual_base_ofbuiltin operations.Added a new predicate
getBitWidthto theTypeclass, which yields the bit-width of the type.
Golang¶
The Go language library now instantiates the shared library
semmle.go.controlflow.Guards, including theGuardandGuardValueclasses and theguardEnsures,guardEnsuresEq,guardEnsuresNeq, andguardEnsuresLeqpredicates.