diff options
author | Misaki Shioi <31817032+shioimm@users.noreply.github.com> | 2025-01-29 22:19:04 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-29 22:19:04 +0900 |
commit | 63b6323e049ccab4ea5ecc716a2be61b8e6b4c3b (patch) | |
tree | 3448381475f7b33d9069465adfc49d89e2be415a | |
parent | 2d3d7a74e91ac521bbcedcc350f6b6877b61faa3 (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.c | 8 |
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; |