Skip to content

C#: Add conditional array access to l-vals#535

Merged
maciejpirog merged 1 commit intomainfrom
mpir/csharp-conditional-array-access-in-lval
Jan 13, 2026
Merged

C#: Add conditional array access to l-vals#535
maciejpirog merged 1 commit intomainfrom
mpir/csharp-conditional-array-access-in-lval

Conversation

@maciejpirog
Copy link
Contributor

Add conditional array access in l-vals (a C#14 feature)

Example:

x = arr?[5]; // was available before
arr?[5] = x; // new addition

In tainting, we simply drop the ?. It is semantically incorrect, but for tainting it does not matter in practical cases, because of the overapproximation. The fix will require a deeper refactoring of AST-to-IL (also left a comment about it in the code).

Related PR in the csharp repo: opengrep/semgrep-c-sharp#3

@maciejpirog maciejpirog force-pushed the mpir/csharp-conditional-array-access-in-lval branch from 145b52f to 7be2478 Compare January 13, 2026 11:06
@maciejpirog maciejpirog merged commit 4d9d335 into main Jan 13, 2026
6 checks passed
@maciejpirog maciejpirog deleted the mpir/csharp-conditional-array-access-in-lval branch January 13, 2026 12:04
@maciejpirog maciejpirog mentioned this pull request Jan 14, 2026
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Jan 17, 2026
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [opengrep/opengrep](https://github.com/opengrep/opengrep) | minor | `v1.14.1` → `v1.15.1` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>opengrep/opengrep (opengrep/opengrep)</summary>

### [`v1.15.1`](https://github.com/opengrep/opengrep/releases/tag/v1.15.1): Opengrep 1.15.1

[Compare Source](opengrep/opengrep@v1.15.0...v1.15.1)

#### Bug fixes

- Clojure translation improvements by [@&#8203;dimitris-m](https://github.com/dimitris-m) in [#&#8203;534](opengrep/opengrep#534)

**Full Changelog**: <opengrep/opengrep@v1.15.0...v1.15.1>

### [`v1.15.0`](https://github.com/opengrep/opengrep/releases/tag/v1.15.0): Opengrep 1.15.0

[Compare Source](opengrep/opengrep@v1.14.1...v1.15.0)

#### What's Changed

- Clojure translation part III by [@&#8203;dimitris-m](https://github.com/dimitris-m) in [#&#8203;527](opengrep/opengrep#527)
- Php modernisation by [@&#8203;corneliuhoffman](https://github.com/corneliuhoffman) in [#&#8203;529](opengrep/opengrep#529)
- Intrafile tainting with variadic functions by [@&#8203;maciejpirog](https://github.com/maciejpirog) in [#&#8203;538](opengrep/opengrep#538)
- C#: The `field` implicit parameter can be skipped in a pattern by [@&#8203;maciejpirog](https://github.com/maciejpirog) in [#&#8203;525](opengrep/opengrep#525)
- C#: Add conditional array access (`?[...]`) to l-values by [@&#8203;maciejpirog](https://github.com/maciejpirog) in [#&#8203;535](opengrep/opengrep#535)
- C#: Collection expressions vs attributes with targets (parser fix) by [@&#8203;maciejpirog](https://github.com/maciejpirog) in [#&#8203;539](opengrep/opengrep#539)
- Add `noopengrep` to the default nosem patterns by [@&#8203;dimitris-m](https://github.com/dimitris-m) in [#&#8203;533](opengrep/opengrep#533)

**Full Changelog**: <opengrep/opengrep@v1.14.1...v1.15.0>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi44MS4yIiwidXBkYXRlZEluVmVyIjoiNDIuODIuMyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90IiwiYXV0b21hdGlvbjpib3QtYXV0aG9yZWQiLCJkZXBlbmRlbmN5LXR5cGU6Om1pbm9yIl19-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants