From 159f14c45f96cab186f2f9408414c4e227f7ffbd Mon Sep 17 00:00:00 2001 From: Florian Engelhardt Date: Sat, 8 Jun 2024 18:51:46 +0200 Subject: [PATCH] fix memleak due to missing `pthread_attr_destroy()`-call Closes GH-14510 --- NEWS | 2 ++ Zend/zend_call_stack.c | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/NEWS b/NEWS index f2b1c8d64b9..cb16871317d 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,8 @@ PHP NEWS values during Generator->throw()). (Bob) . Fixed bug GH-14456 (Attempting to initialize class with private constructor calls destructor). (Girgias) + . Fixed bug GH-14510 (memleak due to missing pthread_attr_destroy()-call). + (Florian Engelhardt) - BCMatch: . Fixed bug (bcpowmod() with mod = -1 returns 1 when it must be 0). (Girgias) diff --git a/Zend/zend_call_stack.c b/Zend/zend_call_stack.c index 702aad77ce9..bbaa8810af9 100644 --- a/Zend/zend_call_stack.c +++ b/Zend/zend_call_stack.c @@ -124,6 +124,7 @@ static bool zend_call_stack_get_linux_pthread(zend_call_stack *stack) error = pthread_attr_getstack(&attr, &addr, &max_size); if (error) { + pthread_attr_destroy(&attr); return false; } @@ -133,6 +134,7 @@ static bool zend_call_stack_get_linux_pthread(zend_call_stack *stack) /* In glibc prior to 2.8, addr and size include the guard pages */ error = pthread_attr_getguardsize(&attr, &guard_size); if (error) { + pthread_attr_destroy(&attr); return false; } @@ -144,6 +146,8 @@ static bool zend_call_stack_get_linux_pthread(zend_call_stack *stack) stack->base = (int8_t*)addr + max_size; stack->max_size = max_size; + pthread_attr_destroy(&attr); + return true; } # else /* defined(HAVE_PTHREAD_GETATTR_NP) && defined(HAVE_PTHREAD_ATTR_GETSTACK) */