summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMisaki Shioi <31817032+shioimm@users.noreply.github.com>2025-01-29 22:19:04 +0900
committerGitHub <noreply@github.com>2025-01-29 22:19:04 +0900
commit63b6323e049ccab4ea5ecc716a2be61b8e6b4c3b (patch)
tree3448381475f7b33d9069465adfc49d89e2be415a
parent2d3d7a74e91ac521bbcedcc350f6b6877b61faa3 (diff)
Ensure that memory is not freed before calling `free_fast_fallback_getaddrinfo_*` (#12661)
Ensure that `getaddrinfo_entry` and `getaddrinfo_shared` exist before free them in the main thread.
Notes
Notes: Merged-By: shioimm <shioi.mm@gmail.com>
-rw-r--r--ext/socket/ipsocket.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/ext/socket/ipsocket.c b/ext/socket/ipsocket.c
index 3e497a43be..ff35682486 100644
--- a/ext/socket/ipsocket.c
+++ b/ext/socket/ipsocket.c
@@ -1168,9 +1168,13 @@ fast_fallback_inetsock_cleanup(VALUE v)
rb_nativethread_lock_unlock(&getaddrinfo_shared->lock);
for (int i = 0; i < arg->family_size; i++) {
- if (need_free[i]) free_fast_fallback_getaddrinfo_entry(&arg->getaddrinfo_entries[i]);
+ if (arg->getaddrinfo_entries[i] && need_free[i]) {
+ free_fast_fallback_getaddrinfo_entry(&arg->getaddrinfo_entries[i]);
+ }
+ }
+ if (getaddrinfo_shared && shared_need_free) {
+ free_fast_fallback_getaddrinfo_shared(&getaddrinfo_shared);
}
- if (shared_need_free) free_fast_fallback_getaddrinfo_shared(&getaddrinfo_shared);
}
int connection_attempt_fd;