Releases: github/codeql-coding-standards
Releases · github/codeql-coding-standards
v2.52.0
Release summary
- New queries added for the following rule packages: Preconditions1, Statements
- The following changes have been made for this release:
CON51-CPP-EnsureActivelyHeldLocksAreReleasedOnExceptionalConditions.ql:- Exclude RAII-style locks from query results, as they cannot be leaked, and are recommended to avoid alerts in this rule.
M0-1-3-UnusedLocalVariable.ql:- Improved performance of the unused local variable analysis by moving constant expression value extraction to a separate pass, eliminating certain expensive joins.
Supported versions
- The LGTM pack is not supported on any released version of LGTM without support from GitHub Professional Services.
- The Code Scanning pack is supported when:
- Using the CodeQL CLI version
2.20.7in conjunction with a copy of the CodeQL standard library for C++ (github/codeql) set to the tagcodeql-cli/v2.20.7. - Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.20.7.
- Using the CodeQL CLI version
Appendix: MISRA-C++-2023 new queries
New queries added to cover the following rules:
- RULE-8-2-9 -
PolymorphicClassTypeExpressionInTypeid.ql - RULE-9-4-2 -
AppropriateStructureOfSwitchStatement.ql - RULE-9-5-1 -
LegacyForStatementsShouldBeSimple.ql - RULE-9-5-2 -
ForRangeInitializerAtMostOneFunctionCall.ql
v2.51.0
Release summary
- New queries added for the following rule packages: Conversions2
- The following changes have been made for this release:
M5-2-2-PointerToAVirtualBaseClassCastToAPointer.ql:- Report casts where the from or to types are typedefs to virtual base classes or derived classes.
- Report casts to a reference type which is a derived type.
- Report casts where the base class is the parent of a virtual base class.
- The alert message has been updated to refer to the virtual base class derivation.
RULE-1-2,RULE-23-3,RULE-23-5,RULE-23-6:- Results that occur in nested macro invocations are now reported in the macro that defines the contravening code, rather than the macro which is first expanded.
- Results the occur in arguments to macro invocations are now reported in at the macro invocation site, instead of the macro definition site.
Supported versions
- The LGTM pack is not supported on any released version of LGTM without support from GitHub Professional Services.
- The Code Scanning pack is supported when:
- Using the CodeQL CLI version
2.20.7in conjunction with a copy of the CodeQL standard library for C++ (github/codeql) set to the tagcodeql-cli/v2.20.7. - Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.20.7.
- Using the CodeQL CLI version
Appendix: MISRA-C++-2023 new queries
New queries added to cover the following rules:
- RULE-8-2-1 -
VirtualBaseClassCastToDerived.ql - RULE-8-2-2 -
NoCStyleOrFunctionalCasts.ql - RULE-8-2-6 -
IntToPointerCastProhibited.ql - RULE-8-2-7 -
NoPointerToIntegralCast.ql - RULE-8-2-8 -
PointerToIntegralCast.ql - RULE-9-2-1 -
NoStandaloneTypeCastExpression.ql
v2.50.0
Release summary
- New queries added for the following rule packages: BannedAPIs, Conversions
- The following changes have been made for this release:
A3-9-1-VariableWidthIntegerTypesUsed.ql:- This query now reports the use of non-fixed width integer types in function return types, with the exception of
chartypes and formainfunctions.
- This query now reports the use of non-fixed width integer types in function return types, with the exception of
ENV34-C,RULE-21-20,RULE-25-5-3:DoNotStorePointersReturnedByEnvFunctions.ql,CallToSetlocaleInvalidatesOldPointers.ql,CallToSetlocaleInvalidatesOldPointersMisra.ql- Fixed a misspelling of "subsequent" in the alert message.
Supported versions
- The LGTM pack is not supported on any released version of LGTM without support from GitHub Professional Services.
- The Code Scanning pack is supported when:
- Using the CodeQL CLI version
2.20.7in conjunction with a copy of the CodeQL standard library for C++ (github/codeql) set to the tagcodeql-cli/v2.20.7. - Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.20.7.
- Using the CodeQL CLI version
Appendix: MISRA-C++-2023 new queries
New queries added to cover the following rules:
- RULE-6-9-2 -
AvoidStandardIntegerTypeNames.ql - RULE-7-0-1 -
NoConversionFromBool.ql - RULE-7-0-2 -
NoImplicitBoolConversion.ql - RULE-7-0-3 -
NoCharacterNumericalValue.ql - RULE-7-0-4 -
InappropriateBitwiseOrShiftOperands.ql - RULE-7-0-5 -
NoSignednessChangeFromPromotion.ql - RULE-7-0-6 -
NumericAssignmentTypeMismatch.ql - RULE-7-11-3 -
FunctionPointerConversionContext.ql - RULE-18-5-2 -
AvoidProgramTerminatingFunctions.ql - RULE-21-2-2 -
UnsafeStringHandlingFunctions.ql - RULE-21-2-3 -
BannedSystemFunction.ql - RULE-21-10-1 -
NoVariadicFunctionMacros.ql - RULE-21-10-2 -
NoCsetjmpHeader.ql - RULE-23-11-1 -
UseSmartPtrFactoryFunctions.ql - RULE-24-5-1 -
CharacterHandlingFunctionRestrictions.ql - RULE-24-5-2 -
NoMemoryFunctionsFromCString.ql - RULE-25-5-1 -
LocaleGlobalFunctionNotAllowed.ql
v2.49.0
Release summary
- New queries added for the following rule packages: Expressions2
- The following changes have been made for this release:
DCL40-C,RULE-8-4:IncompatibleFunctionDeclarations.ql,CompatibleDeclarationFunctionDefined.ql.- Fixed performance issues introduced when upgrading to CodeQL
2.20.7by removing unnecessary check that matching function declarations have matching names.
- Fixed performance issues introduced when upgrading to CodeQL
RULE-7-5:IncorrectlySizedIntegerConstantMacroArgument.ql.- Added a
bindingsetto improve performance when checking if a literal matches the size of an integer constant macro.
- Added a
Supported versions
- The LGTM pack is not supported on any released version of LGTM without support from GitHub Professional Services.
- The Code Scanning pack is supported when:
- Using the CodeQL CLI version
2.20.7in conjunction with a copy of the CodeQL standard library for C++ (github/codeql) set to the tagcodeql-cli/v2.20.7. - Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.20.7.
- Using the CodeQL CLI version
Appendix: CERT-C new queries
New queries added to cover the following rules:
- EXP16-C -
DoNotCompareFunctionPointersToConstantValues.ql
v2.48.0
Release summary
- No new queries were added for this release
- The following changes have been made for this release:
SIG30-C:CallOnlyAsyncSafeFunctionsWithinSignalHandlers.ql- Fixed a misspelling of "asynchronous" in the alert message.
Supported versions
- The LGTM pack is not supported on any released version of LGTM without support from GitHub Professional Services.
- The Code Scanning pack is supported when:
- Using the CodeQL CLI version
2.19.4in conjunction with a copy of the CodeQL standard library for C++ (github/codeql) set to the tagcodeql-cli/v2.19.4. - Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.19.4.
- Using the CodeQL CLI version
v2.47.0
Release summary
- No new queries were added for this release
- The following changes have been made for this release:
FIO39-C,FIO50-CPP,A27-0-3,RULE-30-0-2:IOFstreamMissingPositioning.ql,InterleavedInputOutputWithoutPosition.ql,InterleavedInputOutputWithoutFlush.ql,ReadsAndWritesOnStreamNotSeparatedByPositioning.ql.- Improved performance for codebases with large numbers of stream or file accesses.
Supported versions
- The LGTM pack is not supported on any released version of LGTM without support from GitHub Professional Services.
- The Code Scanning pack is supported when:
- Using the CodeQL CLI version
2.19.4in conjunction with a copy of the CodeQL standard library for C++ (github/codeql) set to the tagcodeql-cli/v2.19.4. - Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.19.4.
- Using the CodeQL CLI version
v2.46.0
Release summary
- No new queries were added for this release
Supported versions
- The LGTM pack is not supported on any released version of LGTM without support from GitHub Professional Services.
- The Code Scanning pack is supported when:
- Using the CodeQL CLI version
2.19.4in conjunction with a copy of the CodeQL standard library for C++ (github/codeql) set to the tagcodeql-cli/v2.19.4. - Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.19.4.
- Using the CodeQL CLI version
v2.45.0
Release summary
- New queries added for the following rule packages: FloatingPoint
- The following changes have been made for this release:
RULE-1-4-EmergentLanguageFeaturesUsed.ql:- Allow usage of atomics,
thread.h, and_Thread_localas per Misra C 2012 Amendment 4.
- Allow usage of atomics,
RULE-21-22,RULE-21-23-TgMathArgumentWithInvalidEssentialType.ql,TgMathArgumentsWithDifferingStandardType.ql- Change type-generic macro analysis for finding macro parameters to be compatible with gcc, by ignoring early arguments inserted by gcc.
- Change explicit conversion logic to ignore the explicit casts inserted in macro bodies by clang, which previously overruled the argument essential type.
RULE-13-2-UnsequencedAtomicReads.ql:- Handle statement expression implementation of atomic operations in gcc.
RULE-21-25-InvalidMemoryOrderArgument.ql:- Handle case of where the enum
memory_orderis declared via a typedef as an anonymous enum. - Rewrite how atomically sequenced operations are found; no longer look for builtins or internal functions, instead look for macros with the exact expected name and analyze the macro bodies for the memory sequence parameter.
- Handle case of where the enum
RULE-9-7-UninitializedAtomicArgument.ql:- Handle gcc case where
atomic_initis defined is a call toatomic_store, and take a more flexible approach to finding the initialized atomic variable.
- Handle gcc case where
DIR-4-15-PossibleMisuseOfUndetectedInfinity.ql,PossibleMisuseOfUndetectedNaN.ql:- Fix issue when analyzing clang/gcc implementations of floating point classification macros, where analysis incorrectly determined that
xinisinf(x)was guaranteed to be infinite at the call site itself, affecting later analysis involvingx.
- Fix issue when analyzing clang/gcc implementations of floating point classification macros, where analysis incorrectly determined that
- The following query suites have been added or modified for CERT C:
- A new query suite has been created
cert-c-default.qlsto avoid confusion with the CERT C++ query suites. Thecert-default.qlssuite has been deprecated, and will be removed in a future releases, and is replaced by thecert-c-default.qlssuite.- The
cert-c-default.qlssuite has been specified as the default for the pack, and will include our most up-to-date coverage for CERT C.
- The
- One new query suite,
cert-c-recommended.qlshas been added to enable running CERT recommendations (as opposed to rules) that will be added in the future. - The default query suite,
cert-c-default.qlshas been set to exclude CERT recommendations (as opposed to rules) that will be added in the future.
- A new query suite has been created
- The following query suites have been added or modified for CERT C++:
- A new query suite has been created
cert-cpp-default.qlsto avoid confusion with the CERT C query suites. Thecert-default.qlssuite has been deprecated, and will be removed in a future releases, and is replaced by thecert-cpp-default.qlssuite.- The
cert-cpp-default.qlssuite has been specified as the default for the pack, and will include our most up-to-date coverage for CERT C.
- The
- A new query suite has been created
cert-cpp-single-translation-unit.qlsto avoid confusion with the CERT C query suites. Thecert-single-translation-unit.qlssuite has been deprecated, and will be removed in a future releases, and is replaced by thecert-cpp-single-translation-unit.qlssuite.
- A new query suite has been created
DIR-4-15-PossibleMisuseOfUndetectedInfinity.ql,PossibleMisuseOfUndetectedNaN.ql:- Add logic to suppress NaNs from the CodeQL extractor in the new restricted range analysis, which can have unexpected downstream effects.
- Alter the behavior of floating point class guards (such as
isinf,isfinite,isnan) to more correctly reflect the branches that have been guarded. - Query files have been moved/refactored to share logic across MISRA-C and MISRA-C++; no observable change in behavior from this is expected.
- All CERT rules now include additional tags to represent the Risk Assessment properties specified on CERT rules.
- In addition, new query suites are included which allow the selection of queries that represent CERT Rules (not Recommendations) for each of the Levels (1-3). These are called
cert-<lang>-<level>.qlsand can be used either directly in the CodeQL CLI, or via the CodeQL Action.
- In addition, new query suites are included which allow the selection of queries that represent CERT Rules (not Recommendations) for each of the Levels (1-3). These are called
- Support for MISRA C 2023 is now completed.
- The default query suites for MISRA C now target MISRA C 2023.
- The user manual has been updated to list MISRA C 2023 as completed.
- The
misra-c-2012-third-edition-with-amendment-2.qlsquery suite can be used to run the queries present in MISRA C 2012 (3rd Edition) and Amendment 2.
Supported versions
- The LGTM pack is not supported on any released version of LGTM without support from GitHub Professional Services.
- The Code Scanning pack is supported when:
- Using the CodeQL CLI version
2.19.4in conjunction with a copy of the CodeQL standard library for C++ (github/codeql) set to the tagcodeql-cli/v2.19.4. - Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.19.4.
- Using the CodeQL CLI version
Appendix: MISRA-C++-2023 new queries
New queries added to cover the following rules:
- DIR-0-3-1 -
PossibleMisuseOfInfiniteFloatingPointValue.ql,PossibleMisuseOfNaNFloatingPointValue.ql
v2.44.0
Release summary
- New queries added for the following rule packages: Concurrency9, EssentialTypes2, FloatingTypes2, Generics, Contracts, Pointers1
- The following changes have been made for this release:
Concurrency.qll- for all queries using this library- This has been refactored into a set of smaller utility files. No impact on query results or performance expected.
- All rules using
Type.qll,TypeUses.qll,Pointers.qll,TrivialType.qll,VariablyModifiedTypes.qll:- Files moved into
cpp/common/typesdirectory. No external changes in behavior expected.
- Files moved into
RULE-2-8-UnusedObjectDefinition.ql,UnusedObjectDefinitionStrict.ql:- Refactor to allow additional parameters in non-macro results for library
DeduplicateMacroResults.qll. - Refactor to replace
LocationwithLocatablein API of libraryDeduplicationMacroResults.qll. - No observable difference in behavior expected.
- Refactor to allow additional parameters in non-macro results for library
EssentialType- for all queries related to essential types:- Updated the way essential types of expressions with "conversions" (including explicit casts, parenthesis, and implicit conversions such as array-to-pointer conversions) are handled, to get proper essential types when parenthesis, casts, and generics interact.
RULE-8-3-DeclarationsOfAFunctionSameNameAndType.ql,DeclarationsOfAnObjectSameNameAndType.ql:- New shared module used to fix false positives for compound types referring to the same basic integer types under a different name, e.g., query will not report for
signed[4]used in place ofint[4]as per MISRA spec. - Now query will report incompatibilities for two functions of the same name with a different number of parameters.
- Query result string updated to not use the word "Compatible," which is confusing, as it may falsely appear that the query is testing for compatibility as defined by C17.
- New shared module used to fix false positives for compound types referring to the same basic integer types under a different name, e.g., query will not report for
RULE-8-4,DCL-40C-CompatibleDeclarationFunctionDefined.ql,CompatibleDeclarationObjectDefined.ql,IncomptatibleFunctionDeclarations.ql:- New shared module used to fix false positives by updating "compatible" type checks to more closely match the C17 standard. For instance,
int[3]andint[]are compatible declarations (whileint[3]andint[4]are not), and typedefs are now resolved as well. Some false positives may still occur regarding structs from different compilation units.
- New shared module used to fix false positives by updating "compatible" type checks to more closely match the C17 standard. For instance,
DIR-4-9-FunctionOverFunctionLikeMacro.ql:- Macros with
_Genericnow no longer reported.
- Macros with
RULE-1-4-EmergentLanguageFeaturesUsed.ql:- Ban on usage of
_Genericsremoved.
- Ban on usage of
RULE-18-6-ThreadLocalObjectAddressCopiedToGlobalObject.ql:- New query added to detect thread local objects assigned to static storage duration objects.
RULE-21-12-ExceptionHandlingFeaturesOfFenvhUsed.ql:- Added reports for
#includeing "fenv.h", and for usingfesetenv,feupdatenv, andfesetround. - Report message altered to handle new cases.
- Added reports for
- The
DeviationsSuppression.qlquery has been restored after being incorrectly deleted in a previous release. DIR-4-11-LowPrecisionPeriodicTrigonometricFunctionCall.ql:- New query within rule added to detect calls to periodic trigonometric functions with values outside of pi*k for k that depends on implementation and application precision goals, assuming k=1 for 32 bit floating types and k=10 for 64 bit floating types.
RULE-8-3,RULE-8-4,DCL40-C,RULE-23-5:DeclarationsOfAFunctionSameNameAndType.ql,DeclarationsOfAnObjectSameNameAndType.ql,CompatibleDeclarationOfFunctionDefined.ql,CompatibleDeclarationObjectDefined.ql,IncompatibleFunctionDeclarations.ql,DangerousDefaultSelectionForPointerInGeneric.ql:- Added pragmas to alter join order on function parameter equivalence (names and types).
- Refactored expression which the optimizer was confused by, and compiled into a cartesian product.
- Altered the module
Compatible.qllto compute equality in two stages. Firstly, all pairs of possible type comparisons (including recursive comparisons) are found, then those pairwise comparisons are evaluated in a second stage. This greatly reduces the number of comparisons and greatly improves performance.
RULE-23-5:DangerousDefaultSelectionForPointerInGeneric.ql:- Altered the module
SimpleAssignment.qllin accordance with the changes toCompatible.qll.
- Altered the module
Supported versions
- The LGTM pack is not supported on any released version of LGTM without support from GitHub Professional Services.
- The Code Scanning pack is supported when:
- Using the CodeQL CLI version
2.19.4in conjunction with a copy of the CodeQL standard library for C++ (github/codeql) set to the tagcodeql-cli/v2.19.4. - Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.19.4.
- Using the CodeQL CLI version
Appendix: MISRA-C-2012 new queries
New queries added to cover the following rules:
- DIR-4-11 -
LowPrecisionPeriodicTrigonometricFunctionCall.ql - DIR-4-15 -
PossibleMisuseOfUndetectedInfinity.ql,PossibleMisuseOfUndetectedNaN.ql - DIR-5-1 -
PossibleDataRaceBetweenThreads.ql - RULE-18-6 -
ThreadLocalObjectAddressCopiedToGlobalObject.ql - RULE-21-22 -
TgMathArgumentWithInvalidEssentialType.ql - RULE-21-23 -
TgMathArgumentsWithDifferingStandardType.ql - RULE-22-15 -
ThreadResourceDisposedBeforeThreadsJoined.ql - RULE-22-17 -
InvalidOperationOnUnlockedMutex.ql - RULE-22-18 -
NonRecursiveMutexRecursivelyLocked.ql,NonRecursiveMutexRecursivelyLockedAudit.ql - RULE-22-19 -
ConditionVariableUsedWithMultipleMutexes.ql - RULE-22-20 -
ThreadStorageNotInitializedBeforeUse.ql,ThreadStoragePointerInitializedInsideThread.ql - RULE-23-1 -
GenericSelectionNotExpandedFromAMacro.ql,GenericSelectionDoesntDependOnMacroArgument.ql - RULE-23-2 -
GenericSelectionNotFromMacroWithSideEffects.ql - RULE-23-3 -
GenericWithoutNonDefaultAssociation.ql - RULE-23-4 -
GenericAssociationWithUnselectableType.ql - RULE-23-5 -
DangerousDefaultSelectionForPointerInGeneric.ql - RULE-23-6 -
GenericExpressionWithIncorrectEssentialType.ql - RULE-23-7 -
InvalidGenericMacroArgumentEvaluation.ql - RULE-23-8 -
DefaultGenericSelectionNotFirstOrLast.ql
v2.43.0
Release summary
- New queries added for the following rule packages: Declarations9, SideEffects3
- The following changes have been made for this release:
RULE-11-3-CastBetweenObjectPointerAndDifferentObjectType.ql- Constrain exception that pointer types to may be cast to char types, so that it does not apply to atomic pointer types, in compliance with MISRA-C 2012 Amendment 4.
RULE-11-8-CastRemovesConstOrVolatileQualification.ql- Query expanded to detect cases of removing
_Atomicqualification, in compliance with MISRA-C 2012 Amendment 4.
- Query expanded to detect cases of removing
EXP33-C,RULE-9-1,A8-5-0,EXP53-CPP-DoNotReadUninitializedMemory.ql,ObjectWithAutoStorageDurationReadBeforeInit.ql,MemoryNotInitializedBeforeItIsRead.ql,DoNotReadUninitializedMemory.ql- Atomic local variables excluded from query results, in compliance with MISRA-C 2012 Amendment 4, and to reduce false positives in the other standards.
RULE-13-2-UnsequencedAtomicReads.ql- New query to find expressions which read an atomic variable more than once between sequence points, to address new case from MISRA-C 2012 Amendment 4.
RULE-3-1-CharacterSequencesAndUsedWithinAComment.ql- Add exception allowing URLs inside of cpp-style
/* ... */comments, in compliance with MISRA-C 2012 Amendment 4. - No longer report cases of
//*some commentin this rule.
- Add exception allowing URLs inside of cpp-style
- A new in code deviation format has been introduced, using the C/C++ attribute syntax:
This can be applied to functions, statements and variables to apply a deviation from the Coding Standards configuration file. The user manual has been updated to describe the new format.
[[codeql::<standard>_deviation("<code-identifier>")]] - For those codebases that cannot use standard attributes, we have also introduced a comment based syntax
Further information is available in the user manual.
// codeql::<standard>_deviation(<code-identifier>) // codeql::<standard>_deviation_next_line(<code-identifier>) // codeql::<standard>_deviation_begin(<code-identifier>) // codeql::<standard>_deviation_end(<code-identifier>) RULE-8-7-ShouldNotBeDefinedWithExternalLinkage.ql:- Remove false positives where the declaration is not defined in the database.
- Remove false positives where the definition and reference are in different translation units.
- Remove false positives where the reference occurs in a header file.
RULE-8-3-DeclarationsOfAFunctionSameNameAndType.ql:- Implement new exception, unnamed parameters are not covered by this rule.
RULE-10-2-AdditionSubtractionOnEssentiallyCharType.ql:- Disallow
+and-operations with an essentially char type and other types larger than int type. - Note, this change affects the essential type of such expressions, which may affect other essential types rules.
- Disallow
RULE-18-1,M5-0-16-PointerAndDerivedPointerMustAddressSameArray.ql,PointerAndDerivedPointerAccessDifferentArray.ql:- Treat casts to byte pointers as pointers to arrays of the size of the pointed-to type.
- Fix typo in report message, "passed" replaced with "past."
- Suppress results where range analysis appears potentially unreliable.
RULE-21-10,RULE-25-5-3,ENV34-C-CallToSetlocaleInvalidatesOldPointers.ql,CallToSetlocaleInvalidatesOldPointersMisra.ql,DoNotStorePointersReturnedByEnvFunctions.ql:- Report usage of returned pointers from
asctime,ctime, during a call to either of the former. - Report usage of returned pointers from
gmtime,localtime, during a call to either of the former.
- Report usage of returned pointers from
Supported versions
- The LGTM pack is not supported on any released version of LGTM without support from GitHub Professional Services.
- The Code Scanning pack is supported when:
- Using the CodeQL CLI version
2.19.4in conjunction with a copy of the CodeQL standard library for C++ (github/codeql) set to the tagcodeql-cli/v2.19.4. - Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.19.4.
- Using the CodeQL CLI version
Appendix: MISRA-C-2012 new queries
New queries added to cover the following rules:
- RULE-11-10 -
AtomicQualifierAppliedToVoid.ql - RULE-13-2 -
UnsequencedAtomicReads.ql