From d84859061a39b81b85bdbae8cfff5088a5c78a93 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Wed, 11 Dec 2024 14:44:50 -0800 Subject: [PATCH] Use ruby_strdup/xfree in fast_fallback Any memory allocated with xmalloc needs to be matched with xfree rather than plain free. Ruby unfortunately redefines strdup to be ruby_strdup, which uses xmalloc so needs to be xfreed. Previously these were mismatched. This commit changes the copy to be an explicit ruby_strdup (to avoid confusion) and the free to be xfree. --- ext/socket/ipsocket.c | 4 ++-- ext/socket/raddrinfo.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ext/socket/ipsocket.c b/ext/socket/ipsocket.c index aaa331003b..f991e2a742 100644 --- a/ext/socket/ipsocket.c +++ b/ext/socket/ipsocket.c @@ -592,8 +592,8 @@ init_fast_fallback_inetsock_internal(VALUE v) rb_nativethread_lock_initialize(&arg->getaddrinfo_shared->lock); arg->getaddrinfo_shared->notify = hostname_resolution_notifier; - arg->getaddrinfo_shared->node = arg->hostp ? strdup(arg->hostp) : NULL; - arg->getaddrinfo_shared->service = strdup(arg->portp); + arg->getaddrinfo_shared->node = arg->hostp ? ruby_strdup(arg->hostp) : NULL; + arg->getaddrinfo_shared->service = ruby_strdup(arg->portp); arg->getaddrinfo_shared->refcount = arg->family_size + 1; for (int i = 0; i < arg->family_size; i++) { diff --git a/ext/socket/raddrinfo.c b/ext/socket/raddrinfo.c index ef8226b66c..dc36c3aa31 100644 --- a/ext/socket/raddrinfo.c +++ b/ext/socket/raddrinfo.c @@ -3029,9 +3029,9 @@ rsock_io_socket_addrinfo(VALUE io, struct sockaddr *addr, socklen_t len) void free_fast_fallback_getaddrinfo_shared(struct fast_fallback_getaddrinfo_shared **shared) { - free((*shared)->node); + xfree((*shared)->node); (*shared)->node = NULL; - free((*shared)->service); + xfree((*shared)->service); (*shared)->service = NULL; rb_nativethread_lock_destroy(&(*shared)->lock); free(*shared);