diff options
| author | DanielGavin <danielgavin5@hotmail.com> | 2024-04-16 00:01:36 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-16 00:01:36 +0200 |
| commit | 63758dad45f4d0b6881c81727528ecc7d39ec5c7 (patch) | |
| tree | a2b46bda4f6c92dccd71021832b09e5494028ecc /src | |
| parent | aa1aabda1cce68a6038c48429cc759f09ad2ebab (diff) | |
| parent | 96ad8de7aefc444933d2fe61eab4a25256c72a6a (diff) | |
Merge pull request #348 from laytan/fix-use-after-free-in-fake-methods
fix use after free in fake methods
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/requests.odin | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/server/requests.odin b/src/server/requests.odin index a616d5c..c2a54c1 100644 --- a/src/server/requests.odin +++ b/src/server/requests.odin @@ -1193,7 +1193,17 @@ notification_did_save :: proc( for k2, v2 in &v.symbols { if corrected_uri.uri == v2.uri { free_symbol(v2, indexer.index.collection.allocator) - v.symbols[k2] = {} + delete_key(&v.symbols, k2) + } + } + + for method, &symbols in v.methods { + for i := 0; i < len(symbols); i += 1 { + #no_bounds_check symbol := symbols[i] + if corrected_uri.uri == symbol.uri { + unordered_remove(&symbols, i) + i -= 1 + } } } } |