From 598c2dae8843a523e2f73271b268aaab58360a2e Mon Sep 17 00:00:00 2001 From: John Salem Date: Tue, 27 Jul 2021 15:55:00 -0700 Subject: [PATCH] Prevent Segfault in EventPipe on disable (#56104) --- src/native/eventpipe/ep-types.h | 2 +- src/native/eventpipe/ep.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/native/eventpipe/ep-types.h b/src/native/eventpipe/ep-types.h index 63e36c6481879..8bec5f127caed 100644 --- a/src/native/eventpipe/ep-types.h +++ b/src/native/eventpipe/ep-types.h @@ -63,7 +63,7 @@ struct _EventPipeProviderCallbackData { #else struct _EventPipeProviderCallbackData_Internal { #endif - const ep_char8_t *filter_data; + ep_char8_t *filter_data; EventPipeCallback callback_function; void *callback_data; int64_t keywords; diff --git a/src/native/eventpipe/ep.c b/src/native/eventpipe/ep.c index 38c1e1a69b43e..eb401dcaa414e 100644 --- a/src/native/eventpipe/ep.c +++ b/src/native/eventpipe/ep.c @@ -246,8 +246,10 @@ ep_provider_callback_data_alloc_copy (EventPipeProviderCallbackData *provider_ca EventPipeProviderCallbackData *instance = ep_rt_object_alloc (EventPipeProviderCallbackData); ep_raise_error_if_nok (instance != NULL); - if (provider_callback_data_src) + if (provider_callback_data_src) { *instance = *provider_callback_data_src; + instance->filter_data = ep_rt_utf8_string_dup (provider_callback_data_src->filter_data); + } ep_on_exit: return instance; @@ -270,7 +272,7 @@ ep_provider_callback_data_init ( { EP_ASSERT (provider_callback_data != NULL); - provider_callback_data->filter_data = filter_data; + provider_callback_data->filter_data = ep_rt_utf8_string_dup (filter_data); provider_callback_data->callback_function = callback_function; provider_callback_data->callback_data = callback_data; provider_callback_data->keywords = keywords; @@ -289,19 +291,22 @@ ep_provider_callback_data_init_copy ( EP_ASSERT (provider_callback_data_src != NULL); *provider_callback_data_dst = *provider_callback_data_src; + provider_callback_data_dst->filter_data = ep_rt_utf8_string_dup (provider_callback_data_src->filter_data); return provider_callback_data_dst; } void ep_provider_callback_data_fini (EventPipeProviderCallbackData *provider_callback_data) { - ; + ep_return_void_if_nok (provider_callback_data != NULL); + ep_rt_utf8_string_free (provider_callback_data->filter_data); } void ep_provider_callback_data_free (EventPipeProviderCallbackData *provider_callback_data) { ep_return_void_if_nok (provider_callback_data != NULL); + ep_provider_callback_data_fini (provider_callback_data); ep_rt_object_free (provider_callback_data); }