Releases: github/codeql-coding-standards
Releases · github/codeql-coding-standards
v2.23.0
Release summary
- No new queries were added for this release
- The following changes have been made for this release:
A0-1-3
- Considered the following additional use cases while reporting a local function as "unused".- The address of a function is taken
- The operand of an expression in an unevaluated context
- Functions marked with [[maybe_unused]]
- Explicitly deleted functions e.g. =delete
- Use of any overload of a function in an overload set constitute a use of all members of the set. An overload set is a set of functions with the same name that differ in the number, type and/or qualifiers of their parameters, and, for the purpose of this query, are limited to functions which are declared in the same scope (namespace or class).
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.13.5
in conjunction with a copy of the CodeQL standard library for C++ (github/codeql
) set to the tagcodeql-cli/v2.13.5
. - Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.13.5.
- Using the CodeQL CLI version
v2.22.0
Release summary
- No new queries were added for this release
- The following changes have been made for this release:
FIO32-C
-DoNotPerformFileOperationsOnDevices.ql
:- The query was updated to work with the latest version of the dataflow library.
A5-1-3
- Only consider lambdas that have zero arguments, since any lambda with non-zero arguments will have an explicit argument list.M0-1-3
- Consider constexpr variables used in template instantiations as "used".A8-4-13
- Address false positives caused by missing modelling of modifying operations for smart pointers for some standard libraries (such as libstdc++).
A20-8-1
/MEM56-CPP
- Address false negatives caused by lack of modelling of flow through smart pointers.
- Reduce flow paths through standard library headers to simplify results.
A18-1-4
- Address false positives caused by missing modelling of modifying operations for smart pointers for some standard libraries (such as libstdc++).
STR51-CPP
- Address false negatives caused by incomplete modelling of the
std::string::replace()
function.
- Address false negatives caused by incomplete modelling of the
A15-5-1
- Rephrase alert message for
noalert(false)
special functions to clarify that this permits exceptions. - Additional results for implicit
noexcept(true)
special functions highlighting that the specification should be made explicit.
- Rephrase alert message for
- Updated the supported CodeQL version to
2.12.7
. A15-2-2
- all results now include an associated exception flow path to avoid a CodeQL CLI bug in 2.12.7. This includes results where an exception is thrown directly in the constructor.
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.12.7
in conjunction with a copy of the CodeQL standard library for C++ (github/codeql
) set to the tagcodeql-cli/v2.12.7
. - Using the CodeQL Action or CodeQL runner with the codeql-bundle-20230418.
- Using the CodeQL CLI version
v2.21.0
Release summary
- No new queries were added for this release
- The following changes have been made for this release:
- FIO32-C - DoNotPerformFileOperationsOnDevices.ql:
- The query was rewritten to no longer depend of the DefaultTaintTracking library, which will be deprecated.
- A7-1-5 - exclude compiler generated variables, such as those generated by for loops.
- M8-0-1 - exclude compiler generated variables, such as those generated by for loops.
- Updated the supported CodeQL version to 2.11.6.
- A number of rules had the wrong query ids attached for deviation purposes. This means they could not be deviated against using the correct ID, but could be incidentally suppressed when deviating a different rule. We have fixed this behavior for the following rules:
- RULE-11-4
- DIR-4-12
- RULE-21-6
- RULE-21-9
- MEM51-CPP
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.11.6
in conjunction with a copy of the CodeQL standard library for C++ (github/codeql
) set to the tagcodeql-cli/v2.11.6
. - Using the CodeQL Action or CodeQL runner with the codeql-bundle-20221211.
- Using the CodeQL CLI version
v2.20.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.10.5
in conjunction with a copy of the CodeQL standard library for C++ (github/codeql
) set to the tagcodeql-cli/v2.10.5
. - Using the CodeQL Action or CodeQL runner with the codeql-bundle-20220908.
- Using the CodeQL CLI version
v2.19.0
Release summary
- No new queries were added for this release
- The following changes have been made for this release:
A16-0-1
- reduce unneeded results related to#pragma
, as it's already reported by A16-7-1.DCL51-CPP
- reduce false positives related to use of__func__
A2-10-1
- reduce false positives for identifiers in same scope and relating to template variablesRULE-5-3
- reduce false positives for identifiers in same scopeA5-1-1
- reduce false positives by omitting literals written into file streams and wrappers around log and stream callsA14-7-2
- alert messages have been slightly adjusted to refer only to the base name of a file, not the full relative path.DCL56-CPP
- performance has been improved for databases with complex initializers.- Exclude the use of
__func__
from certain queries, as it is the proscribed way to return the name of the current function:A27-0-4
- Use of the value returned by__func__
is no longer flagged as a use of C-style strings.A18-1-1
-__func__
is no longer flagged as a declaration of a variable using C-style arrays.
DCL51-CPP
-cpp/cert/use-of-single-underscore-reserved-prefix
- remove false positives which were compiler generated, such as the function_FUN
generated by the compiler for lambdas converted to function pointers.
Fix issues emerged running the test suite when compiled withqcc
:
- Fix False Negatives issues
A1-1-1
: restrict alerts to mentioned typesA5-2-5
: get type forvalue_type
A18-1-2
A18-1-3
A18-9-1
: support std inline namespaces (std::__1
)A23-0-1
A23-0-2
: functions instd
might be defined in inline namespacesM0-1-4
: removed test caseM6-5-2
: equality operator alternative implementationsM17-0-5
:longjmp
might be a macroCTR51-CPP
CTR53-CPP
ERR50-CPP
ERR52-CPP
STR52-CPP
: fixed by library changesMSC51-CPP
:time
can be in the global scopeSTR51-CPP
: String constructor might have 1 parameter.
- Fix False Positives issues
STR53-CPP
: compute initial container size for copy constructorA0-4-1
: numeric limits might be defined in__libcpp_numeric_limits
A0-4-3
: the rule now only checks the last-std
compilation flag
- Fix exclusion criteria using the
isExcluded()
predicateA2-13-3
A8-4-4
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.10.5
in conjunction with a copy of the CodeQL standard library for C++ (github/codeql
) set to the tagcodeql-cli/v2.10.5
. - Using the CodeQL Action or CodeQL runner with the codeql-bundle-20220908.
- Using the CodeQL CLI version
v2.18.0
Release summary
- No new queries were added for this release
- The following changes have been made for this release:
A15-4-4
-MissingNoExcept.ql
- Exclude call operators embedded in a lambda expression from functions to be declared
noexcept
ornoexcept(false)
.
- Exclude call operators embedded in a lambda expression from functions to be declared
A2-7-3
-UndocumentedUserDefinedType.ql
:- Exclude lambda functions from program elements to be documented.
- Fix compatibility issues with the
qcc
compiler and standard headers:RULE-21-4
:longjmp
can be implmented as macroENV32-C
: exit functions can be implmented as macroERR33-C
FIO34-C
FIO46-C
RULE-22-6
: the library filesReadErrorsAndEOF.qll
DoNotAccessAClosedFile.qll
FileAccess.qll
have been updated to support different definitions of IO related functions and macrosRULE-10-6
: Fix output string formatSTR37-C
: add support for a differenttolower/toupper
macro implementationEXP43-C
: add explicit support for library functions that are mentioned in the rule descriptionRULE-11-1
RULE-11-2
RULE-11-5
: support for a different NULL pointer definitionSTR38-C
: removed links to library internals in the output 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.10.5
in conjunction with a copy of the CodeQL standard library for C++ (github/codeql
) set to the tagcodeql-cli/v2.10.5
. - Using the CodeQL Action or CodeQL runner with the codeql-bundle-20220908.
- Using the CodeQL CLI version
v2.17.0
Release summary
- New queries added for the following rule packages: OutOfBounds
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.10.5
in conjunction with a copy of the CodeQL standard library for C++ (github/codeql
) set to the tagcodeql-cli/v2.10.5
. - Using the CodeQL Action or CodeQL runner with the codeql-bundle-20220908.
- Using the CodeQL CLI version
Appendix: MISRA-C-2012 new queries
New queries added to cover the following rules:
- RULE-21-17 -
StringFunctionPointerArgumentOutOfBounds.ql
- RULE-21-18 -
StringLibrarySizeArgumentOutOfBounds.ql
Appendix: CERT-C new queries
New queries added to cover the following rules:
- ARR30-C -
DoNotFormOutOfBoundsPointersOrArraySubscripts.ql
- ARR38-C -
LibraryFunctionArgumentOutOfBounds.ql
v2.16.0
Release summary
- New queries added for the following rule packages: Contracts7, FloatingTypes, IntegerOverflow, InvalidMemory2, Language3, Memory2, Memory3, SideEffects3, SideEffects4, SignalHandlers, StandardLibraryFunctionTypes, Statements1, Statements2, Statements3, Statements4, Statements5, Statements6, Static, Types1
- The following changes have been made for this release:
Rule 20.12
- the performance of this rule has been improved.- The performance of the following identifier related rules has been improved:
- MISRA C 2012
Rule 5.8
- MISRA C 2012
Rule 8.7
- MISRA C 2012
M6-6-2
: Changed formatting of the alert message.M6-4-2
: Changed formatting of alert message.FIO42-C
-CloseFilesWhenTheyAreNoLongerNeeded.ql
:- Parentheses have been added to a resolve previously lacking parentheses in the
where
clause, such that the exclusion mechanism only functioned for a certain subset of results. - The query implementation has been moved to a shared implementation.
- Parentheses have been added to a resolve previously lacking parentheses in the
M5-19-1
:- Reduce false negatives by fixing a bug where a constant expression was immediately casted to a signed type.
M6-4-4
- alert message updated for clarity.A4-7-1
-IntegerExpressionLeadToDataLoss.ql
- reduce false positives and false negatives by:- Identifying additional categories of valid guard.
- Excluding guards which were not proven to prevent overflow or underflow.
- Expand coverage to include unary operations and arithmetic assignment operations.
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.10.5
in conjunction with a copy of the CodeQL standard library for C++ (github/codeql
) set to the tagcodeql-cli/v2.10.5
. - Using the CodeQL Action or CodeQL runner with the codeql-bundle-20220908.
- Using the CodeQL CLI version
Appendix: MISRA-C-2012 new queries
New queries added to cover the following rules:
- DIR-4-6 -
PlainNumericalTypeUsedOverExplicitTypedef.ql
- RULE-1-2 -
LanguageExtensionsShouldNotBeUsed.ql
- RULE-1-3 -
OccurrenceOfUndefinedBehavior.ql
- RULE-7-4 -
StringLiteralAssignedToNonConstChar.ql
- RULE-12-2 -
RightHandOperandOfAShiftRange.ql
- RULE-12-4 -
ConstantUnsignedIntegerExpressionsWrapAround.ql
- RULE-12-5 -
SizeofOperatorUsedOnArrayTypeParam.ql
- RULE-13-2 -
UnsequencedSideEffects.ql
- RULE-14-2 -
ForLoopNotWellFormed.ql
- RULE-14-3 -
ControllingExprInvariant.ql
- RULE-14-4 -
NonBooleanIfCondition.ql
,NonBooleanIterationCondition.ql
- RULE-15-1 -
GotoStatementUsed.ql
- RULE-15-2 -
GotoLabelLocationCondition.ql
- RULE-15-3 -
GotoLabelBlockCondition.ql
- RULE-15-4 -
LoopIterationCondition.ql
- RULE-15-5 -
FunctionReturnCondition.ql
- RULE-15-6 -
SwitchCompoundCondition.ql
,LoopCompoundCondition.ql
,SelectionCompoundCondition.ql
- RULE-15-7 -
IfElseEndCondition.ql
- RULE-16-1 -
SwitchCaseStartCondition.ql
,SwitchStmtNotWellFormed.ql
- RULE-16-2 -
NestSwitchLabelInSwitchStatement.ql
- RULE-16-3 -
BreakShallTerminateSwitchClause.ql
- RULE-16-4 -
EverySwitchShallHaveDefaultLabel.ql
- RULE-16-5 -
DefaultNotFirstOrLastOfSwitch.ql
- RULE-16-6 -
SwitchClauseNumberCondition.ql
- RULE-16-7 -
SwitchExpressionBoolCondition.ql
- RULE-17-2 -
RecursiveFunctionCondition.ql
- RULE-17-4 -
NonVoidFunctionReturnCondition.ql
- RULE-17-6 -
UseOfArrayStatic.ql
- RULE-19-1 -
ObjectAssignedToAnOverlappingObject.ql
,ObjectCopiedToAnOverlappingObject.ql
- RULE-21-13 -
CtypeFunctionArgNotUnsignedCharOrEof.ql
- RULE-21-15 -
MemcpyMemmoveMemcmpArgNotPointersToCompatibleTypes.ql
- RULE-22-1 -
FreeMemoryWhenNoLongerNeededMisra.ql
,CloseFileHandleWhenNoLongerNeededMisra.ql
- RULE-22-2 -
OnlyFreeMemoryAllocatedDynamicallyMisra.ql
Appendix: CERT-C new queries
New queries added to cover the following rules:
- ARR32-C -
VariableLengthArraySizeNotInValidRange.ql
- ARR36-C -
DoNotSubtractPointersThatDoNotReferToTheSameArray.ql
,DoNotRelatePointersThatDoNotReferToTheSameArray.ql
- ARR37-C -
DoNotUsePointerArithmeticOnNonArrayObjectPointers.ql
- EXP35-C -
DoNotModifyObjectsWithTemporaryLifetime.ql
- EXP42-C -
DoNotComparePaddingData.ql
- FLP30-C -
FloatingPointLoopCounters.ql
- FLP32-C -
UncheckedRangeDomainPoleErrors.ql
- FLP34-C -
UncheckedFloatingPointConversion.ql
- FLP36-C -
IntToFloatPreservePrecision.ql
- FLP37-C -
MemcmpUsedToCompareFloats.ql
- INT30-C -
UnsignedIntegerOperationsWrapAround.ql
- INT31-C -
IntegerConversionCausesDataLoss.ql
- INT32-C -
SignedIntegerOverflow.ql
- INT33-C -
DivOrRemByZero.ql
- INT34-C -
ExprShiftedbyNegativeOrGreaterPrecisionOperand.ql
- INT35-C -
UseCorrectIntegerPrecisions.ql
- INT36-C -
ConvertingAPointerToIntegerOrIntegerToPointer.ql
- MEM31-C -
FreeMemoryWhenNoLongerNeededCert.ql
- MEM33-C -
AllocStructsWithAFlexibleArrayMemberDynamically.ql
,CopyStructsWithAFlexibleArrayMemberDynamically.ql
- MEM34-C -
OnlyFreeMemoryAllocatedDynamicallyCert.ql
- MEM35-C -
InsufficientMemoryAllocatedForObject.ql
- MEM36-C -
DoNotModifyAlignmentOfMemoryWithRealloc.ql
- MSC33-C -
DoNotPassInvalidDataToTheAsctimeFunction.ql
- MSC39-C -
DoNotCallVaArgOnAVaListThatHasAnIndeterminateValue.ql
- PRE31-C -
SideEffectsInArgumentsToUnsafeMacros.ql
- SIG30-C -
CallOnlyAsyncSafeFunctionsWithinSignalHandlers.ql
- SIG31-C -
DoNotAccessSharedObjectsInSignalHandlers.ql
- SIG34-C -
DoNotCallSignalFromInterruptibleSignalHandlers.ql
- SIG35-C -
DoNotReturnFromAComputationalExceptionHandler.ql
v2.15.1
Release summary
- No new queries were added for this release
- The following changes have been made for this release:
- The performance of the following queries related to essential types have been improved:
Rule 10.1
Rule 10.2
Rule 10.3
Rule 10.4
Rule 10.5
Rule 10.6
Rule 10.7
Rule 10.8
Rule 14.1
Rule 21.14
Rule 21.16
- The performance of the following queries related to essential types have been improved:
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.10.5
in conjunction with a copy of the CodeQL standard library for C++ (github/codeql
) set to the tagcodeql-cli/v2.10.5
. - Using the CodeQL Action or CodeQL runner with the codeql-bundle-20220908.
- Using the CodeQL CLI version
v2.15.0
Release summary
- New queries added for the following rule packages: EssentialTypes, Memory1
- The following changes have been made for this release:
A13-5-2
- address a false positive where lambda expressions with empty captures were being flagged as having a non-compliant conversion operator.A0-1-2
- Addressed false positives where the return values are cast to
void
in C-style or assigned tostd::ignore
.
- Addressed false positives where the return values are cast to
A0-1-4
- Addressed false positives where the parameters are marked with attribute
[[maybe_unused]]
, or either cast tovoid
in C-style or assigned tostd::ignore
in the function body.
- Addressed false positives where the parameters are marked with attribute
RULE-8-4
-CompatibleDeclarationObjectDefined.ql
- Update rule implementation based on changes in the CodeQL libraries.
- Updated the CodeQL version to
2.10.5
. A2-10-4
-IdentifierNameOfStaticFunctionReusedInNamespace.ql
:- Reuse of an identifier name of a static function in a namespace is now detected.
A2-10-4
-IdentifierNameOfStaticNonMemberObjectReusedInNamespace.ql
:- Reuse of an identifier name of a static non-member object in a namespace is now detected.
A2-10-5
-IdentifierNameOfStaticNonMemberObjectWithExternalOrInternalLinkageIsReused.ql
:- Reuse of an identifier name of a static non-member object with internal linkage in a namespace is now detected.
A5-2-2
CStyleCasts.ql
- exclude template parameters to avoid false positives when using the "functional notation" syntax. In addition, provide a greater explanation on limitations of this query.
- Improved alert message to avoid reporting locations in standard header files, which cannot be viewed in Code Scanning, in the following queries:
-Rule 21.4
-Rule 21.5
-Rule 21.6
-Rule 21.7
-Rule 21.8
-Rule 21.9
-Rule 21.10
-Rule 21.11
-Rule 21.12
-Rule 21.21
A13-2-2
-BinaryOperatorAndBitwiseOperatorReturnAPrvalue.ql
- The formatting of the query output message has been changed and operators are now displayed starting with the return type instead of ending with it.
CON41-C
: Refactored to address compiler compatibility issues. More accurate
modeling of cases where macros are modeled against other macros such as
atomic_compare_exchange_weak
andatomic_store
.CON40-C
: Refactored to address compiler compatibility issues. More accurate
modeling of cases where macros are modeled against other macros such as
atomic_compare_exchange_weak
andatomic_store
.
STR37-C
- reduce false negatives by improving detection when the<ctype>
functions are implemented using macros.
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.10.5
in conjunction with a copy of the CodeQL standard library for C++ (github/codeql
) set to the tagcodeql-cli/v2.10.5
. - Using the CodeQL Action or CodeQL runner with the codeql-bundle-20220908.
- Using the CodeQL CLI version
Appendix: MISRA-C-2012 new queries
New queries added to cover the following rules:
- RULE-9-2 -
InitializerForAggregateOrUnionNotEnclosedInBraces.ql
- RULE-9-3 -
PartiallyInitializedArrayWithExplicitInitializers.ql
- RULE-9-4 -
RepeatedInitializationOfAggregateObjectElement.ql
- RULE-10-1 -
OperandsOfAnInappropriateEssentialType.ql
,PointerTypeOnLogicalOperator.ql
- RULE-10-2 -
AdditionSubtractionOnEssentiallyCharType.ql
- RULE-10-3 -
AssignmentOfIncompatibleEssentialType.ql
- RULE-10-4 -
OperandsWithMismatchedEssentialTypeCategory.ql
- RULE-10-5 -
InappropriateEssentialTypeCast.ql
- RULE-10-6 -
AssignmentToWiderEssentialType.ql
- RULE-10-7 -
ImplicitConversionOfCompositeExpression.ql
- RULE-10-8 -
InappropriateCastOfCompositeExpression.ql
- RULE-14-1 -
LoopOverEssentiallyFloatType.ql
- RULE-21-14 -
MemcmpUsedToCompareNullTerminatedStrings.ql
- RULE-21-16 -
MemcmpOnInappropriateEssentialTypeArgs.ql