aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorLaytan Laats <laytanlaats@hotmail.com>2024-04-15 19:03:54 +0200
committerLaytan Laats <laytanlaats@hotmail.com>2024-04-15 19:03:54 +0200
commit96ad8de7aefc444933d2fe61eab4a25256c72a6a (patch)
treed3f100212207d3494a7ef227a4296e08e959816a /src/server
parentb042f1fd7648a2fb3b8f0880c8122b737a7a869f (diff)
fix use after free in fake methods
Diffstat (limited to 'src/server')
-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 711fb79..fe99dc6 100644
--- a/src/server/requests.odin
+++ b/src/server/requests.odin
@@ -1179,7 +1179,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
+ }
}
}
}