Skip to content

Releases: github/codeql-coding-standards

v2.52.0

01 Dec 20:24
781f1ee

Choose a tag to compare

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.7 in conjunction with a copy of the CodeQL standard library for C++ (github/codeql) set to the tag codeql-cli/v2.20.7.
    • Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.20.7.

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

20 Oct 21:10
5ca3ff8

Choose a tag to compare

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.7 in conjunction with a copy of the CodeQL standard library for C++ (github/codeql) set to the tag codeql-cli/v2.20.7.
    • Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.20.7.

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

08 Sep 20:54
6e8a7c0

Choose a tag to compare

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 char types and for main functions.
  • 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.7 in conjunction with a copy of the CodeQL standard library for C++ (github/codeql) set to the tag codeql-cli/v2.20.7.
    • Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.20.7.

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

18 Aug 22:39
875ae94

Choose a tag to compare

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.7 by removing unnecessary check that matching function declarations have matching names.
    • RULE-7-5: IncorrectlySizedIntegerConstantMacroArgument.ql.
      • Added a bindingset to improve performance when checking if a literal matches the size of an integer constant macro.

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.7 in conjunction with a copy of the CodeQL standard library for C++ (github/codeql) set to the tag codeql-cli/v2.20.7.
    • Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.20.7.

Appendix: CERT-C new queries

New queries added to cover the following rules:

  • EXP16-C - DoNotCompareFunctionPointersToConstantValues.ql

v2.48.0

15 Jul 19:02
ae77621

Choose a tag to compare

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.4 in conjunction with a copy of the CodeQL standard library for C++ (github/codeql) set to the tag codeql-cli/v2.19.4.
    • Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.19.4.

v2.47.0

16 Jun 19:38
6631d2f

Choose a tag to compare

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.4 in conjunction with a copy of the CodeQL standard library for C++ (github/codeql) set to the tag codeql-cli/v2.19.4.
    • Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.19.4.

v2.46.0

04 Jun 14:12
d891a22

Choose a tag to compare

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.4 in conjunction with a copy of the CodeQL standard library for C++ (github/codeql) set to the tag codeql-cli/v2.19.4.
    • Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.19.4.

v2.45.0

21 May 18:06
3b16880

Choose a tag to compare

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_local as per Misra C 2012 Amendment 4.
    • 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_order is 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.
    • RULE-9-7 - UninitializedAtomicArgument.ql:
      • Handle gcc case where atomic_init is defined is a call to atomic_store, and take a more flexible approach to finding the initialized atomic variable.
    • DIR-4-15 - PossibleMisuseOfUndetectedInfinity.ql, PossibleMisuseOfUndetectedNaN.ql:
      • Fix issue when analyzing clang/gcc implementations of floating point classification macros, where analysis incorrectly determined that x in isinf(x) was guaranteed to be infinite at the call site itself, affecting later analysis involving x.
    • The following query suites have been added or modified for CERT C:
      • A new query suite has been created cert-c-default.qls to avoid confusion with the CERT C++ query suites. The cert-default.qls suite has been deprecated, and will be removed in a future releases, and is replaced by the cert-c-default.qls suite.
        • The cert-c-default.qls suite has been specified as the default for the pack, and will include our most up-to-date coverage for CERT C.
      • One new query suite, cert-c-recommended.qls has 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.qls has been set to exclude CERT recommendations (as opposed to rules) that will be added in the future.
    • The following query suites have been added or modified for CERT C++:
      • A new query suite has been created cert-cpp-default.qls to avoid confusion with the CERT C query suites. The cert-default.qls suite has been deprecated, and will be removed in a future releases, and is replaced by the cert-cpp-default.qls suite.
        • The cert-cpp-default.qls suite has been specified as the default for the pack, and will include our most up-to-date coverage for CERT C.
      • A new query suite has been created cert-cpp-single-translation-unit.qls to avoid confusion with the CERT C query suites. The cert-single-translation-unit.qls suite has been deprecated, and will be removed in a future releases, and is replaced by the cert-cpp-single-translation-unit.qls suite.
    • 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>.qls and can be used either directly in the CodeQL CLI, or via the CodeQL Action.
    • 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.qls query 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.4 in conjunction with a copy of the CodeQL standard library for C++ (github/codeql) set to the tag codeql-cli/v2.19.4.
    • Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.19.4.

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

30 Apr 15:05
7600a3c

Choose a tag to compare

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/types directory. No external changes in behavior expected.
  • RULE-2-8 - UnusedObjectDefinition.ql, UnusedObjectDefinitionStrict.ql:
    • Refactor to allow additional parameters in non-macro results for library DeduplicateMacroResults.qll.
    • Refactor to replace Location with Locatable in API of library DeduplicationMacroResults.qll.
    • No observable difference in behavior expected.
  • 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 of int[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.
  • 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] and int[] are compatible declarations (while int[3] and int[4] are not), and typedefs are now resolved as well. Some false positives may still occur regarding structs from different compilation units.
  • DIR-4-9 - FunctionOverFunctionLikeMacro.ql:
    • Macros with _Generic now no longer reported.
  • RULE-1-4 - EmergentLanguageFeaturesUsed.ql:
    • Ban on usage of _Generics removed.
  • 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 using fesetenv, feupdatenv, and fesetround.
    • Report message altered to handle new cases.
  • The DeviationsSuppression.ql query 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.qll to 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.qll in accordance with the changes to Compatible.qll.

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.4 in conjunction with a copy of the CodeQL standard library for C++ (github/codeql) set to the tag codeql-cli/v2.19.4.
    • Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.19.4.

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

24 Mar 18:30
cf2b300

Choose a tag to compare

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 _Atomic qualification, in compliance with MISRA-C 2012 Amendment 4.
    • 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 comment in this rule.
    • A new in code deviation format has been introduced, using the C/C++ attribute syntax:
      [[codeql::<standard>_deviation("<code-identifier>")]]
      
      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.
    • For those codebases that cannot use standard attributes, we have also introduced a comment based syntax
      // codeql::<standard>_deviation(<code-identifier>)
      // codeql::<standard>_deviation_next_line(<code-identifier>)
      // codeql::<standard>_deviation_begin(<code-identifier>)
      // codeql::<standard>_deviation_end(<code-identifier>)
      
      Further information is available in the user manual.
    • 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.
    • 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.

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.4 in conjunction with a copy of the CodeQL standard library for C++ (github/codeql) set to the tag codeql-cli/v2.19.4.
    • Using the CodeQL Action or CodeQL runner with the codeql-bundle-v2.19.4.

Appendix: MISRA-C-2012 new queries

New queries added to cover the following rules:

  • RULE-11-10 - AtomicQualifierAppliedToVoid.ql
  • RULE-13-2 - UnsequencedAtomicReads.ql