Skip to content

Commit 4999d3e

Browse files
author
Felicity Chapman
committed
Merge branch 'rc/1.21' into merge-121-back
Conflicts: change-notes/1.21/analysis-python.md
2 parents 18443e3 + 9c79959 commit 4999d3e

File tree

6 files changed

+60
-65
lines changed

6 files changed

+60
-65
lines changed

change-notes/1.21/analysis-cpp.md

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,37 +6,36 @@
66

77
| **Query** | **Tags** | **Purpose** |
88
|-----------------------------|-----------|--------------------------------------------------------------------|
9-
| `()`-declared function called with too few arguments (`cpp/too-few-arguments`) | Correctness | Find all cases where the number of arguments is less than the number of parameters of the function, provided the function is also properly declared/defined elsewhere. |
10-
| `()`-declared function called with mismatched arguments (`cpp/mismatched-function-arguments`) | Correctness | Find all cases where the types of arguments do not match the types of parameters of the function, provided the function is also properly declared/defined elsewhere. |
11-
| Call to alloca in a loop (`cpp/alloca-in-loop`) | reliability, correctness, external/cwe/cwe-770 | Finds calls to `alloca` in loops, which can lead to stack overflow if the number of iterations is large. Newly displayed on LGTM. |
12-
| Use of dangerous function (`dangerous-function-overflow`) | reliability, security, external/cwe/cwe-242 | Finds calls to `gets`, which does not guard against buffer overflow. These results were previously detected by the `cpp/potentially-dangerous-function` query. |
9+
| Call to alloca in a loop (`cpp/alloca-in-loop`) | reliability, correctness, external/cwe/cwe-770 | Finds calls to `alloca` in loops, which can lead to stack overflow if the number of iterations is large. Newly displayed [on LGTM](https://lgtm.com/rules/1508831665988/). |
10+
| Call to function with fewer arguments than declared parameters (`cpp/too-few-arguments`) | correctness, maintainability, security | Finds all cases where the number of arguments is fewer than the number of parameters of the function, provided the function is also properly declared/defined elsewhere. Results are displayed by default [on LGTM](https://lgtm.com/rules/1508860726279/). |
11+
| Call to a function with one or more incompatible arguments (`cpp/mistyped-function-arguments`) | correctness, maintainability | Finds all cases where the types of arguments do not match the types of parameters of the function, provided the function is also properly declared/defined elsewhere. Results are not displayed by default [on LGTM](https://lgtm.com/rules/1508849286093/). |
12+
| Use of dangerous function (`cpp/dangerous-function-overflow`) | reliability, security, external/cwe/cwe-242 | Finds calls to `gets`, which does not guard against buffer overflow. These results were previously detected by the `cpp/potentially-dangerous-function` query. Results for both queries are displayed by default on LGTM. |
1313

1414
## Changes to existing queries
1515

1616
| **Query** | **Expected impact** | **Change** |
1717
|----------------------------|------------------------|------------------------------------------------------------------|
1818
| Buffer not sufficient for string (`cpp/overflow-calculated`) | Fewer results | This query no longer reports results that would be found by the 'No space for zero terminator' (`cpp/no-space-for-terminator`) query. |
19-
| No space for zero terminator (`cpp/no-space-for-terminator`) | More correct results | This query now detects calls to `std::malloc`. |
20-
| Commented-out code (`cpp/commented-out-code`) | More correct results | Commented out preprocessor code is now detected by this query. |
19+
| Call to function with extraneous arguments (`cpp/futile-params`) | Improved coverage | Query has been generalized to find all cases where the number of arguments exceeds the number of parameters of the function, provided the function is also properly declared/defined elsewhere. |
20+
| Commented-out code (`cpp/commented-out-code`) | More correct results | Commented-out preprocessor code is now detected by this query. |
21+
| Comparison result is always the same | Fewer false positive results | The range analysis library is now more conservative about floating point values being possibly `NaN`. |
22+
| Constructor with default arguments will be used as a copy constructor (`cpp/constructor-used-as-copy-constructor`) | Lowered severity and precision | The severity and precision of this query have been reduced to "warning" and "low", respectively. This coding pattern is used intentionally and safely in a number of real-world projects. Results are no longer displayed on LGTM unless you choose to display them. |
2123
| Dead code due to goto or break statement (`cpp/dead-code-goto`) | Fewer false positive results | Functions containing preprocessor logic are now excluded from this analysis. |
22-
| Mismatching new/free or malloc/delete (`cpp/new-free-mismatch`) | Fewer false positive results | Fixed an issue where functions were being identified as allocation functions inappropriately. Also affects `cpp/new-array-delete-mismatch` and `cpp/new-delete-array-mismatch`. |
23-
| Overflow in uncontrolled allocation size (`cpp/uncontrolled-allocation-size`) | More correct results | This query has been reworked so that it can find a wider variety of results. |
24-
| Memory may not be freed (`cpp/memory-may-not-be-freed`) | More correct results | Support added for more Microsoft-specific allocation functions, including `LocalAlloc`, `GlobalAlloc`, `HeapAlloc` and `CoTaskMemAlloc`. |
2524
| Memory is never freed (`cpp/memory-never-freed`) | More correct results | Support added for more Microsoft-specific allocation functions, including `LocalAlloc`, `GlobalAlloc`, `HeapAlloc` and `CoTaskMemAlloc`. |
25+
| Memory may not be freed (`cpp/memory-may-not-be-freed`) | More correct results | Support added for more Microsoft-specific allocation functions, including `LocalAlloc`, `GlobalAlloc`, `HeapAlloc` and `CoTaskMemAlloc`. |
26+
| Mismatching new/free or malloc/delete (`cpp/new-free-mismatch`) | Fewer false positive results | Fixed an issue where functions were being identified as allocation functions inappropriately. This correction also affects `cpp/new-array-delete-mismatch` and `cpp/new-delete-array-mismatch`. |
27+
| No space for zero terminator (`cpp/no-space-for-terminator`) | More correct results | This query now detects calls to `std::malloc`. |
28+
| Overflow in uncontrolled allocation size (`cpp/uncontrolled-allocation-size`) | More correct results | This query has been reworked so that it can find a wider variety of results. |
2629
| Resource not released in destructor (`cpp/resource-not-released-in-destructor`) | Fewer false positive results | Resource allocation and deallocation functions are now determined more accurately. |
27-
| Comparison result is always the same | Fewer false positive results | The range analysis library is now more conservative about floating point values being possibly `NaN` |
2830
| Use of potentially dangerous function | More correct results | Calls to `localtime`, `ctime` and `asctime` are now detected by this query. |
29-
| Wrong type of arguments to formatting function (`cpp/wrong-type-format-argument`) | More correct results and fewer false positive results | This query now more accurately identifies wide and non-wide string/character format arguments on different platforms. Platform detection has also been made more accurate for the purposes of this query. |
30-
| Wrong type of arguments to formatting function (`cpp/wrong-type-format-argument`) | Fewer false positive results | Non-standard uses of %L are now understood. |
31-
| `()`-declared function called with too many arguments (`cpp/futile-params`) | Improved coverage | Query has been generalized to find all cases where the number of arguments exceedes the number of parameters of the function, provided the function is also properly declared/defined elsewhere. |
32-
| Use of potentially dangerous function (`cpp/potentially-dangerous-function`) | Fewer results | Results relating to the standard library `gets` function have been moved into a new query (`dangerous-function-overflow`). |
33-
| Constructor with default arguments will be used as a copy constructor (`cpp/constructor-used-as-copy-constructor`) | Lowered severity and precision | The severity and precision of this query have been reduced to "warning" and "low", respectively, due to this coding pattern being used intentionally and safely in a number of real-world projects. |
31+
| Wrong type of arguments to formatting function (`cpp/wrong-type-format-argument`) | More correct results and fewer false positive results | This query now understands non-standard uses of `%L`. In addition, it more accurately identifies wide and non-wide string/character format arguments on different platforms. |
32+
| Use of potentially dangerous function (`cpp/potentially-dangerous-function`) | Fewer results | Results relating to the standard library `gets` function have been moved into a new query (`cpp/dangerous-function-overflow`). |
3433

3534
## Changes to QL libraries
3635
- The predicate `Declaration.hasGlobalName` now only holds for declarations that are not nested in a class. For example, it no longer holds for a member function `MyClass::myFunction` or a constructor `MyClass::MyClass`, whereas previously it would classify those two declarations as global names.
37-
- In class `Declaration`, predicates `getQualifiedName/0` and `hasQualifiedName/1` are no longer recommended for finding functions by name. Instead, use `hasGlobalName/1` and the new `hasQualifiedName/2` and `hasQualifiedName/3` predicates. This improves performance and makes it more reliable to identify names involving templates and inline namespaces.
38-
- Additional support for definition by reference has been added to the `semmle.code.cpp.dataflow.TaintTracking` library.
39-
- The taint tracking library now includes taint-specific edges for functions modeled in `semmle.code.cpp.models.interfaces.DataFlow`.
40-
- The taint tracking library adds flow through library functions that are modeled in `semmle.code.cpp.models.interfaces.Taint`. Queries can add subclasses of `TaintFunction` to specify additional flow.
36+
- In class `Declaration`, predicates `getQualifiedName/0` and `hasQualifiedName/1` are no longer recommended for finding functions by name. Instead, use `hasGlobalName/1` and the new `hasQualifiedName/2` and `hasQualifiedName/3` predicates. This improves performance and identifies names involving templates and inline namespaces more reliably.
37+
- Additional support for definition by reference has been added to the `semmle.code.cpp.dataflow.TaintTracking` library, including:
38+
- Taint-specific edges for functions modeled in `semmle.code.cpp.models.interfaces.DataFlow`.
39+
- Flow through library functions that are modeled in `semmle.code.cpp.models.interfaces.Taint`. Queries can add subclasses of `TaintFunction` to specify additional flow.
4140
- There is a new `FoldExpr` class, representing C++17 fold expressions.
4241
- The member predicates `DeclarationEntry.getUnspecifiedType`, `Expr.getUnspecifiedType`, and `Variable.getUnspecifiedType` have been added. These should be preferred over the existing `getUnderlyingType` predicates.

change-notes/1.21/analysis-csharp.md

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
# Improvements to C# analysis
22

3+
## General improvements
4+
5+
C# analysis now supports the extraction and analysis of many C# 8 features. For details see [Changes to code extraction](#changes-to-code-extraction) and [Changes to QL libraries](#changes-to-ql-libraries) below.
6+
37
## Changes to existing queries
48

59
| **Query** | **Expected impact** | **Change** |
610
|------------------------------|------------------------|-----------------------------------|
7-
| Class defines a field that uses an ICryptoTransform class in a way that would be unsafe for concurrent threads (`cs/thread-unsafe-icryptotransform-field-in-class`) | Fewer false positive results | The criteria for a result has changed to include nested properties, nested fields and collections. The format of the alert message has changed to highlight the static field. |
8-
| Constant condition (`cs/constant-condition`) | Fewer false positive results | Results have been removed where the `null` value is in a conditional expression on the left hand side of a null-coalescing expression. For example, in `(a ? b : null) ?? c`, `null` is not considered to be a constant condition. |
9-
| Useless upcast (`cs/useless-upcast`) | Fewer false positive results | Results have been removed where the upcast is used to disambiguate the target of a constructor call. |
11+
| Class defines a field that uses an ICryptoTransform class in a way that would be unsafe for concurrent threads (`cs/thread-unsafe-icryptotransform-field-in-class`) | Fewer false positive results | The criteria for a result has changed to include nested properties, nested fields, and collections. The format of the alert message has changed to highlight the static field. |
12+
| Constant condition (`cs/constant-condition`) | Fewer false positive results | The query now ignores code where the `null` value is in a conditional expression on the left hand side of a null-coalescing expression. For example, in `(a ? b : null) ?? c`, `null` is not considered to be a constant condition. |
13+
| Useless upcast (`cs/useless-upcast`) | Fewer false positive results | The query now ignores code where the upcast is used to disambiguate the target of a constructor call. |
1014

1115
## Changes to code extraction
1216

@@ -17,12 +21,12 @@
1721
- `static` modifiers on local functions
1822
- Null-coalescing assignment expressions
1923

20-
* The `unmanaged` type parameter constraint is now extracted.
24+
* The `unmanaged` type parameter constraint is also now extracted.
2125

2226
## Changes to QL libraries
2327

24-
* The class `Attribute` has two new predicates: `getConstructorArgument()` and `getNamedArgument()`. The first predicate returns arguments to the underlying constructor call and the latter returns named arguments for initializing fields and properties.
25-
* The class `TypeParameterConstraints` has a new predicate `hasUnmanagedTypeConstraint()`, indicating that the type parameter has the `unmanaged` constraint.
28+
* The class `Attribute` has two new predicates: `getConstructorArgument()` and `getNamedArgument()`. The first predicate returns arguments to the underlying constructor call and the second returns named arguments for initializing fields and properties.
29+
* The class `TypeParameterConstraints` has a new predicate `hasUnmanagedTypeConstraint()`. This shows whether the type parameter has the `unmanaged` constraint.
2630
* The following QL classes have been added to model C# 8 features:
2731
- Class `AssignCoalesceExpr` models null-coalescing assignment, for example `x ??= y`
2832
- Class `IndexExpr` models from-end index expressions, for example `^1`
@@ -37,5 +41,3 @@
3741
- Class `Switch` models both `SwitchExpr` and `SwitchStmt`
3842
- Class `Case` models both `CaseStmt` and `SwitchCaseExpr`
3943
- Class `UsingStmt` models both `UsingBlockStmt` and `UsingDeclStmt`
40-
41-
## Changes to autobuilder

change-notes/1.21/analysis-java.md

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
# Improvements to Java analysis
22

3-
## New queries
4-
5-
| **Query** | **Tags** | **Purpose** |
6-
|-----------------------------|-----------|--------------------------------------------------------------------|
7-
83
## Changes to existing queries
94

105
| **Query** | **Expected impact** | **Change** |
@@ -19,14 +14,13 @@
1914
`checkArgument` and `checkState` methods in
2015
`com.google.common.base.Preconditions`, the `isTrue` and `validState` methods
2116
in `org.apache.commons.lang3.Validate`, as well as any similar custom
22-
methods. This means that more guards are recognized yielding precision
23-
improvements in a number of queries including `java/index-out-of-bounds`,
17+
methods. This means that more guards are recognized which improves the precision of a number of queries including `java/index-out-of-bounds`,
2418
`java/dereferenced-value-may-be-null`, and `java/useless-null-check`.
2519
* The default sanitizer in taint tracking has been made more precise. The
26-
sanitizer works by looking for guards that inspect tainted strings, and it
27-
used to work at the level of individual variables. This has been changed to
28-
use the `Guards` library, such that only guarded variable accesses are
29-
sanitized. This may give additional results in the security queries.
30-
* Spring framework support is enhanced by taking into account additional
20+
sanitizer works by looking for guards that inspect tainted strings. It
21+
previously worked at the level of individual variables. Now it
22+
uses the `Guards` library, such that only guarded variable accesses are
23+
sanitized. This may give additional results for security queries.
24+
* Spring framework support now takes into account additional
3125
annotations that indicate remote user input. This affects all security
32-
queries, which may yield additional results.
26+
queries, which may give additional results.

change-notes/1.21/analysis-python.md

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,22 +31,18 @@ The increased precision in tracking of values through `*` arguments may remove f
3131
Overall the number of true positive results should increase and the number false negative results should decline.
3232
We welcome feedback on the new implementation, particularly any surprising changes in results.
3333

34-
3534
## New queries
36-
| **Query** | **Tags** | **Purpose** |
37-
|-----------|----------|-------------|
38-
| Accepting unknown SSH host keys when using Paramiko (`py/paramiko-missing-host-key-validation`) | security, external/cwe/cwe-295 | Finds instances where Paramiko is configured to accept unknown host keys. Results are shown on LGTM by default. |
39-
| Use of 'return' or 'yield' outside a function (`py/return-or-yield-outside-function`) | reliability, correctness | Finds instances where `return`, `yield`, and `yield from` are used outside a function. Results are not shown on LGTM by default. |
40-
41-
## Changes to existing queries
4235

43-
| **Query** | **Expected impact** | **Change** |
44-
|-----------|---------------------|------------|
36+
| **Query** | **Tags** | **Purpose** |
37+
|-----------|----------|-------------|
38+
| Accepting unknown SSH host keys when using Paramiko (`py/paramiko-missing-host-key-validation`) | security, external/cwe/cwe-295 | Finds instances where Paramiko is configured to accept unknown host keys. Results are shown [on LGTM](https://lgtm.com/rules/1508297729270/) by default. |
39+
| Use of 'return' or 'yield' outside a function (`py/return-or-yield-outside-function`) | reliability, correctness | Finds instances where `return`, `yield`, and `yield from` are used outside a function. Results are not shown on LGTM by default. |
4540

4641
## Changes to code extraction
4742

48-
* *Series of bullet points*
43+
* String literals as expressions within literal string interpolation (f-strings) are now handled correctly.
4944

50-
## Changes to QL libraries
45+
* The Python extractor now handles invalid input more robustly. In particular, it exits gracefully when:
5146

52-
* *Series of bullet points*
47+
* A non-existent file or directory is specified using the `--path` option, or as a file name.
48+
* An invalid number is specified for the `--max-procs` option.

change-notes/support/language-support.rst

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ Note that where there are several versions or dialects of a language, the suppor
1313

1414
.. container:: footnote-group
1515

16-
.. [1] The best results are achieved with COBOL code that stays close to the ANSI 85 standard.
17-
.. [2] Builds that execute on Java 6 to 11 can be analyzed. The analysis understands Java 11 language features.
18-
.. [3] JSX and Flow code, YAML, JSON, and HTML files may also be analyzed with JavaScript files.
19-
.. [4] TypeScript analysis is performed by running the JavaScript extractor with TypeScript enabled. This is the default for LGTM.
16+
.. [1] Support for the Arm Compiler (armcc) is preliminary.
17+
.. [2] In addition, support is included for the preview features of C# 8.0 and .NET Core 3.0.
18+
.. [3] The best results are achieved with COBOL code that stays close to the ANSI 85 standard.
19+
.. [4] Builds that execute on Java 6 to 12 can be analyzed. The analysis understands Java 12 language features.
20+
.. [5] JSX and Flow code, YAML, JSON, HTML, and XML files may also be analyzed with JavaScript files.
21+
.. [6] TypeScript analysis is performed by running the JavaScript extractor with TypeScript enabled. This is the default for LGTM.

0 commit comments

Comments
 (0)