Commit Graph

4303 Commits

Author SHA1 Message Date
Robert Marsh
0b66be5f07 Swift: restore ArrayElement as an alias for CollectionElement 2023-09-13 18:29:03 +00:00
Robert Marsh
43ca192ceb Swift: remove ArrayContent in UnsafeJsEvalQuery 2023-09-13 18:26:06 +00:00
Geoffrey White
6aa8daeeb6 Swift: Fix inline expectations. 2023-09-13 19:06:54 +01:00
Geoffrey White
535a69cd8b Merge branch 'main' into logfix 2023-09-13 19:01:52 +01:00
Geoffrey White
e109892388 Merge pull request #14189 from geoffw0/protocol2
Swift: Consistent additional taint steps between the cleartext-* queries
2023-09-13 18:44:20 +01:00
Geoffrey White
d01a3e26d6 Swift: Change note. 2023-09-13 18:20:49 +01:00
Geoffrey White
200d9a4dfb Swift: Port regex mode flag character fix from Python. 2023-09-13 18:19:02 +01:00
Geoffrey White
df60f560a2 Swift: Add demonstrative test case. 2023-09-13 18:11:40 +01:00
Anders Schack-Mulligen
f5a4b792bd C++/Go/Python/Ruby/Swift: Add dummy localMustFlowStep. 2023-09-13 15:43:46 +02:00
Geoffrey White
3bf0d66d6c Merge pull request #13906 from geoffw0/commandinject2
Swift: Add tests and develop command injection query
2023-09-13 08:59:06 +01:00
Robert Marsh
d9e694be9d Swift: update test expectation for collection content 2023-09-12 19:20:43 +00:00
Robert Marsh
4b970ff774 Swift: update models for array/collection content 2023-09-12 19:20:22 +00:00
Robert Marsh
3b7295b0fd Swift: unify ArrayContent and CollectionContent 2023-09-12 19:12:44 +00:00
Robert Marsh
7ca6b6f9a6 Swift: add dataflow test for async for 2023-09-12 19:05:03 +00:00
Robert Marsh
53ad559da5 Swift: fix for-try-await CFG 2023-09-12 19:04:30 +00:00
Robert Marsh
ecf1d98ce5 Merge pull request #14165 from rdmarsh2/rdmarsh2/swift/keypath-write-flow
Swift: flow through writeable keypaths
2023-09-12 14:24:40 -04:00
Geoffrey White
0d7769f687 Merge pull request #13276 from geoffw0/sqlpathinject
Swift: Add path injection sinks for sqlite3 and SQLite.swift
2023-09-12 17:36:27 +01:00
Geoffrey White
7e962dc764 Swift: Accept fixed test cases. 2023-09-12 17:18:29 +01:00
Robert Marsh
c2868fe05a Swift: change note for keypath write dataflow 2023-09-12 15:53:50 +00:00
Robert Marsh
47ac54bb81 Swift: autoformat DataFlowPrivate 2023-09-12 15:52:53 +00:00
Robert Marsh
8f797c7189 Merge branch 'main' into rdmarsh2/swift/keypath-write-flow 2023-09-12 15:51:36 +00:00
Alex Denisov
743fd902a1 Swift: fix CFG for identity expressions (await, dot_self, parent) 2023-09-12 16:04:45 +02:00
Geoffrey White
d65f2b4fa9 Swift: Change note. 2023-09-12 14:36:37 +01:00
Geoffrey White
ae0fcf791b Swift: Expand the additional taint step from the cleartext storage database query to the other sensitive data queries. 2023-09-11 22:25:17 +01:00
Geoffrey White
aa5820c061 Swift: Add some test cases. 2023-09-11 19:33:37 +01:00
Geoffrey White
e038f60640 Swift: Convert some sinks to CSV. 2023-09-11 14:54:32 +01:00
Geoffrey White
7d05446483 Swift: Formatting. 2023-09-11 14:11:11 +01:00
Geoffrey White
1cde183005 Merge branch 'main' into logfix 2023-09-11 13:14:58 +01:00
Geoffrey White
3fd5de83cb Merge branch 'main' into sqlpathinject 2023-09-11 12:42:49 +01:00
Geoffrey White
fc69be4df9 Merge branch 'main' into quicktest 2023-09-11 12:25:38 +01:00
github-actions[bot]
d699880c86 Post-release preparation for codeql-cli-2.14.4 2023-09-08 21:17:52 +00:00
Robert Marsh
988a871999 Swift: add flow through for-in loops 2023-09-08 20:00:27 +00:00
Robert Marsh
a3e250aef5 Swift: extract iterator variable for for-in loops 2023-09-08 19:08:57 +00:00
Robert Marsh
50d23f145b merge main into for-in getnextcall branch 2023-09-08 15:51:27 +00:00
Robert Marsh
161e5a4ca2 Merge branch 'main' into rdmarsh2/swift/keypath-write-flow 2023-09-08 15:39:06 +00:00
Robert Marsh
1082b1d4d1 Swift: use PostUpdateNodeImpl for more postupdate nodes 2023-09-08 15:19:46 +00:00
Robert Marsh
0d79158bb1 Swift: remove TODOs after deciding not to do them 2023-09-07 20:15:12 +00:00
Robert Marsh
603f2cd3b2 Swift: fix test expectation properly 2023-09-07 19:35:02 +00:00
Robert Marsh
0fff540add Swift: update a test expectation for dictionary flow 2023-09-07 16:14:23 +00:00
Robert Marsh
4f4491a876 Swift: autoformat 2023-09-07 16:14:05 +00:00
Robert Marsh
5fe942e642 Swift: flow through writeable keypaths 2023-09-07 15:56:44 +00:00
Robert Marsh
5bdd9597d2 Merge branch 'main' into rdmarsh2/swift/dictionary-flow-tuples 2023-09-06 14:50:16 +00:00
github-actions[bot]
abf2b12b1c Release preparation for version 2.14.4 2023-09-05 16:56:14 +00:00
Alex Denisov
35e949945d Swift: add queries for unresolved AST nodes 2023-09-05 13:29:11 +02:00
AlexDenisov
e2602fbbc4 Merge pull request #14119 from github/alexdenisov/sequence-expr
Swift: fix SequenceExpr extraction
2023-09-04 12:29:07 +02:00
Paolo Tranquilli
7d89028688 Merge pull request #14106 from github/alexdenisov/rename-xcode-autobuilder
Swift: rename autobuilder. NFC
2023-09-04 12:28:47 +02:00
Alex Denisov
888dd786b4 Swift: fix SequenceExpr extraction
Before we extracted all the subexpressions from the `SequenceExpr` while we should've only extracted the expressions at odd indices:
```
...
/// SequenceExpr - A list of binary operations which has not yet been
/// folded into a tree.  The operands all have even indices, while the
/// subexpressions with odd indices are all (potentially overloaded)
/// references to binary operators.
class SequenceExpr final : public Expr,
...
```

The AST for a `SequenceExpr` looks like this:

```
sequence_expr:
  unresolved_dot_expr:
    ...
  assign_expr:
    member_ref_expr:
      ...
    dot_syntax_call_expr:
      ...
  unresolved_member_chain_expr:
    ...
```

however, what's is not visible with the "final" AST is that `unresolved_dot_expr` is the unresolved version of `assign_expr.member_ref_expr` and the `unresolved_member_chain_expr` is the unresolved version of `assign_expr.dot_syntax_call_expr`.
This becomes visible when I enable typechecker debugging:

```c++
auto &typeCheckerOptions = invocation.getTypeCheckerOptions();
typeCheckerOptions.DebugConstraintSolver = true;
```

Which prints the following snippets:

```
---Initial constraints for the given expression---
(assign_expr type='()' location=foo.swift:25:54 range=[foo.swift:25:13 - line:25:57]
  (unresolved_dot_expr type='$T2' location=foo.swift:25:29 range=[foo.swift:25:13 - line:25:29] field 'preferredDatePickerStyle' function_ref=unapplied
    (unresolved_dot_expr type='$T1' location=foo.swift:25:18 range=[foo.swift:25:13 - line:25:18] field 'datePicker' function_ref=unapplied
      (declref_expr type='DatePickerCell' location=foo.swift:25:13 range=[foo.swift:25:13 - line:25:13] decl=foo.(file).DatePickerRowProtocol extension.configurePickerStyle(_:_:).cell@foo.swift:15:33 function_ref=unapplied)))
  (unresolved_member_chain_expr implicit type='$T5' location=foo.swift:25:57 range=[foo.swift:25:56 - line:25:57]
    (unresolved_member_expr type='$T4' location=foo.swift:25:57 range=[foo.swift:25:56 - line:25:57] name='wheels' function_ref=unapplied)))

// ...

---Type-checked expression---
(assign_expr type='()' location=foo.swift:25:54 range=[foo.swift:25:13 - line:25:57]
  (member_ref_expr type='@lvalue UIDatePickerStyle' location=foo.swift:25:29 range=[foo.swift:25:13 - line:25:29] decl=UIKit.(file).UIDatePicker.preferredDatePickerStyle
    (force_value_expr implicit type='UIDatePicker' location=foo.swift:25:18 range=[foo.swift:25:13 - line:25:18] implicit_iuo_unwrap
      (load_expr implicit type='UIDatePicker?' location=foo.swift:25:18 range=[foo.swift:25:13 - line:25:18]
        (member_ref_expr type='@lvalue UIDatePicker?' location=foo.swift:25:18 range=[foo.swift:25:13 - line:25:18] decl=foo.(file).DatePickerCell.datePicker@foo.swift:10:29
          (declref_expr type='DatePickerCell' location=foo.swift:25:13 range=[foo.swift:25:13 - line:25:13] decl=foo.(file).DatePickerRowProtocol extension.configurePickerStyle(_:_:).cell@foo.swift:15:33 function_ref=unapplied)))))
  (dot_syntax_call_expr type='UIDatePickerStyle' location=foo.swift:25:57 range=[foo.swift:25:56 - line:25:57]
    (declref_expr type='(UIDatePickerStyle.Type) -> UIDatePickerStyle' location=foo.swift:25:57 range=[foo.swift:25:57 - line:25:57] decl=UIKit.(file).UIDatePickerStyle.wheels function_ref=unapplied)
    (argument_list implicit
      (argument
        (type_expr implicit type='UIDatePickerStyle.Type' location=foo.swift:25:56 range=[foo.swift:25:56 - line:25:56] typerepr='UIDatePickerStyle')))))
```

The proposed solution is to only extract subexpressions at indices from `SequenceExpr` thus ignoring all the unresolved leftovers.

Note: I'm not entirely sure about the case when there is only child (`elements.size() == 1`) so I'm always extracting it.

This patch fixes the last source of unresolved expressions.
2023-09-04 11:42:12 +02:00
Geoffrey White
0cb00c9091 Swift: Change note. 2023-08-31 15:50:54 +01:00
Geoffrey White
93c39c5fdd Swift: Add data flow through OpenExistentialExpr. 2023-08-31 15:50:32 +01:00
Geoffrey White
b8d29e8fc1 Swift: Add a more realistic test case as well. 2023-08-31 15:46:47 +01:00