From 84f6dd43a622dcc4e33bf5f1de9f879f3408071a Mon Sep 17 00:00:00 2001 From: John Salem Date: Wed, 21 Jul 2021 10:26:05 -0700 Subject: [PATCH 1/4] dup filter_data to prevent segfault --- src/native/eventpipe/ep-provider.c | 2 +- src/native/eventpipe/ep.c | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/native/eventpipe/ep-provider.c b/src/native/eventpipe/ep-provider.c index b9077c8601eef..e5913c59546c0 100644 --- a/src/native/eventpipe/ep-provider.c +++ b/src/native/eventpipe/ep-provider.c @@ -76,7 +76,7 @@ provider_prepare_callback_data ( return ep_provider_callback_data_init ( provider_callback_data, - filter_data, + ep_rt_utf8_string_dup (filter_data), provider->callback_func, provider->callback_data, keywords, diff --git a/src/native/eventpipe/ep.c b/src/native/eventpipe/ep.c index 38c1e1a69b43e..22852e95fcabf 100644 --- a/src/native/eventpipe/ep.c +++ b/src/native/eventpipe/ep.c @@ -224,7 +224,7 @@ ep_provider_callback_data_alloc ( ep_raise_error_if_nok (ep_provider_callback_data_init ( instance, - filter_data, + ep_rt_ut8_string_dup (filter_data), callback_function, callback_data, keywords, @@ -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 != NULL) { *instance = *provider_callback_data_src; + instance->filter_data = ep_rt_utf8_string_dup (provider_callback_data_src->filter_data); + } ep_on_exit: return instance; @@ -289,6 +291,7 @@ 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; } @@ -302,6 +305,7 @@ void ep_provider_callback_data_free (EventPipeProviderCallbackData *provider_callback_data) { ep_return_void_if_nok (provider_callback_data != NULL); + ep_rt_utf8_string_free (provider_callback_data->filter_data); ep_rt_object_free (provider_callback_data); } From ffa978b59267dbaa7c381f0fdac04a299ddb90bc Mon Sep 17 00:00:00 2001 From: John Salem Date: Wed, 21 Jul 2021 11:30:58 -0700 Subject: [PATCH 2/4] fix typo and incorrect const --- src/native/eventpipe/ep-types.h | 8 ++++---- src/native/eventpipe/ep.c | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/native/eventpipe/ep-types.h b/src/native/eventpipe/ep-types.h index 63e36c6481879..4950a87439991 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; @@ -77,7 +77,7 @@ struct _EventPipeProviderCallbackData { }; #endif -EP_DEFINE_GETTER(EventPipeProviderCallbackData *, provider_callback_data, const ep_char8_t *, filter_data) +EP_DEFINE_GETTER(EventPipeProviderCallbackData *, provider_callback_data, ep_char8_t *, filter_data) EP_DEFINE_GETTER(EventPipeProviderCallbackData *, provider_callback_data, EventPipeCallback, callback_function) EP_DEFINE_GETTER(EventPipeProviderCallbackData *, provider_callback_data, void *, callback_data) EP_DEFINE_GETTER(EventPipeProviderCallbackData *, provider_callback_data, int64_t, keywords) @@ -86,7 +86,7 @@ EP_DEFINE_GETTER(EventPipeProviderCallbackData *, provider_callback_data, bool, EventPipeProviderCallbackData * ep_provider_callback_data_alloc ( - const ep_char8_t *filter_data, + ep_char8_t *filter_data, EventPipeCallback callback_function, void *callback_data, int64_t keywords, @@ -99,7 +99,7 @@ ep_provider_callback_data_alloc_copy (EventPipeProviderCallbackData *provider_ca EventPipeProviderCallbackData * ep_provider_callback_data_init ( EventPipeProviderCallbackData *provider_callback_data, - 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 22852e95fcabf..ad2743e28cef7 100644 --- a/src/native/eventpipe/ep.c +++ b/src/native/eventpipe/ep.c @@ -212,7 +212,7 @@ ep_provider_callback_data_queue_fini (EventPipeProviderCallbackDataQueue *provid EventPipeProviderCallbackData * ep_provider_callback_data_alloc ( - const ep_char8_t *filter_data, + ep_char8_t *filter_data, EventPipeCallback callback_function, void *callback_data, int64_t keywords, @@ -224,7 +224,7 @@ ep_provider_callback_data_alloc ( ep_raise_error_if_nok (ep_provider_callback_data_init ( instance, - ep_rt_ut8_string_dup (filter_data), + ep_rt_utf8_string_dup (filter_data), callback_function, callback_data, keywords, @@ -263,7 +263,7 @@ ep_provider_callback_data_alloc_copy (EventPipeProviderCallbackData *provider_ca EventPipeProviderCallbackData * ep_provider_callback_data_init ( EventPipeProviderCallbackData *provider_callback_data, - const ep_char8_t *filter_data, + ep_char8_t *filter_data, EventPipeCallback callback_function, void *callback_data, int64_t keywords, From 601dafb50e28feb74d4888ed8562bd643f048e29 Mon Sep 17 00:00:00 2001 From: John Salem Date: Fri, 23 Jul 2021 10:37:41 -0700 Subject: [PATCH 3/4] PR feedback --- src/native/eventpipe/ep-provider.c | 2 +- src/native/eventpipe/ep-types.h | 6 +++--- src/native/eventpipe/ep.c | 14 +++++++------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/native/eventpipe/ep-provider.c b/src/native/eventpipe/ep-provider.c index e5913c59546c0..b9077c8601eef 100644 --- a/src/native/eventpipe/ep-provider.c +++ b/src/native/eventpipe/ep-provider.c @@ -76,7 +76,7 @@ provider_prepare_callback_data ( return ep_provider_callback_data_init ( provider_callback_data, - ep_rt_utf8_string_dup (filter_data), + filter_data, provider->callback_func, provider->callback_data, keywords, diff --git a/src/native/eventpipe/ep-types.h b/src/native/eventpipe/ep-types.h index 4950a87439991..8bec5f127caed 100644 --- a/src/native/eventpipe/ep-types.h +++ b/src/native/eventpipe/ep-types.h @@ -77,7 +77,7 @@ struct _EventPipeProviderCallbackData { }; #endif -EP_DEFINE_GETTER(EventPipeProviderCallbackData *, provider_callback_data, ep_char8_t *, filter_data) +EP_DEFINE_GETTER(EventPipeProviderCallbackData *, provider_callback_data, const ep_char8_t *, filter_data) EP_DEFINE_GETTER(EventPipeProviderCallbackData *, provider_callback_data, EventPipeCallback, callback_function) EP_DEFINE_GETTER(EventPipeProviderCallbackData *, provider_callback_data, void *, callback_data) EP_DEFINE_GETTER(EventPipeProviderCallbackData *, provider_callback_data, int64_t, keywords) @@ -86,7 +86,7 @@ EP_DEFINE_GETTER(EventPipeProviderCallbackData *, provider_callback_data, bool, EventPipeProviderCallbackData * ep_provider_callback_data_alloc ( - ep_char8_t *filter_data, + const ep_char8_t *filter_data, EventPipeCallback callback_function, void *callback_data, int64_t keywords, @@ -99,7 +99,7 @@ ep_provider_callback_data_alloc_copy (EventPipeProviderCallbackData *provider_ca EventPipeProviderCallbackData * ep_provider_callback_data_init ( EventPipeProviderCallbackData *provider_callback_data, - ep_char8_t *filter_data, + const 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 ad2743e28cef7..0fa576afa850b 100644 --- a/src/native/eventpipe/ep.c +++ b/src/native/eventpipe/ep.c @@ -212,7 +212,7 @@ ep_provider_callback_data_queue_fini (EventPipeProviderCallbackDataQueue *provid EventPipeProviderCallbackData * ep_provider_callback_data_alloc ( - ep_char8_t *filter_data, + const ep_char8_t *filter_data, EventPipeCallback callback_function, void *callback_data, int64_t keywords, @@ -224,7 +224,7 @@ ep_provider_callback_data_alloc ( ep_raise_error_if_nok (ep_provider_callback_data_init ( instance, - ep_rt_utf8_string_dup (filter_data), + filter_data, callback_function, callback_data, keywords, @@ -246,7 +246,7 @@ 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 != NULL) { + if (provider_callback_data_src) { *instance = *provider_callback_data_src; instance->filter_data = ep_rt_utf8_string_dup (provider_callback_data_src->filter_data); } @@ -263,7 +263,7 @@ ep_provider_callback_data_alloc_copy (EventPipeProviderCallbackData *provider_ca EventPipeProviderCallbackData * ep_provider_callback_data_init ( EventPipeProviderCallbackData *provider_callback_data, - ep_char8_t *filter_data, + const ep_char8_t *filter_data, EventPipeCallback callback_function, void *callback_data, int64_t keywords, @@ -272,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; @@ -298,14 +298,14 @@ ep_provider_callback_data_init_copy ( 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_rt_utf8_string_free (provider_callback_data->filter_data); ep_rt_object_free (provider_callback_data); } From fd39140b486ef0b4a147bc7fec48998466fbe029 Mon Sep 17 00:00:00 2001 From: John Salem Date: Mon, 26 Jul 2021 09:47:22 -0700 Subject: [PATCH 4/4] call fini in free --- src/native/eventpipe/ep.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/native/eventpipe/ep.c b/src/native/eventpipe/ep.c index 0fa576afa850b..eb401dcaa414e 100644 --- a/src/native/eventpipe/ep.c +++ b/src/native/eventpipe/ep.c @@ -306,6 +306,7 @@ 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); }