aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDanielGavin <danielgavin5@hotmail.com>2024-04-16 00:01:36 +0200
committerGitHub <noreply@github.com>2024-04-16 00:01:36 +0200
commit63758dad45f4d0b6881c81727528ecc7d39ec5c7 (patch)
treea2b46bda4f6c92dccd71021832b09e5494028ecc /src
parentaa1aabda1cce68a6038c48429cc759f09ad2ebab (diff)
parent96ad8de7aefc444933d2fe61eab4a25256c72a6a (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.odin12
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
+ }
}
}
}