From e7c59136370fd293e860fe5b637014949338a434 Mon Sep 17 00:00:00 2001 From: Przemyslaw Delewski <102958445+pdelewski@users.noreply.github.com> Date: Fri, 5 May 2023 08:43:20 +0200 Subject: [PATCH] calling die or exit directly lead to segfault (#55) * calling die or exit directly lead to segfault * pre hook not needed --- otel_observer.c | 6 ++-- tests/calling_die_lead_to_segfault.phpt | 39 +++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 tests/calling_die_lead_to_segfault.phpt diff --git a/otel_observer.c b/otel_observer.c index eaaeb42d..6cd8a842 100644 --- a/otel_observer.c +++ b/otel_observer.c @@ -280,11 +280,13 @@ static void observer_end(zend_execute_data *execute_data, zval *retval, } if (UNEXPECTED(EG(exception))) { + // do not release params[3] if exit was called + if (exception && !zend_is_unwind_exit(exception)) { + OBJ_RELEASE(Z_OBJ(params[3])); + } if (exception) { OBJ_RELEASE(exception); - OBJ_RELEASE(Z_OBJ(params[3])); } - ZVAL_OBJ_COPY(¶ms[3], EG(exception)); } diff --git a/tests/calling_die_lead_to_segfault.phpt b/tests/calling_die_lead_to_segfault.phpt new file mode 100644 index 00000000..67b40114 --- /dev/null +++ b/tests/calling_die_lead_to_segfault.phpt @@ -0,0 +1,39 @@ +--TEST-- +Check if calling die or exit will finish gracefully +--EXTENSIONS-- +opentelemetry +--FILE-- + + + +--EXPECT-- +exit!