diff options
| author | STANLEY SUFFICOOL <ssufficool@php.net> | 2014-10-24 20:00:48 -0700 |
|---|---|---|
| committer | STANLEY SUFFICOOL <ssufficool@php.net> | 2014-10-24 20:00:48 -0700 |
| commit | e33ba844e52c5dc8e2fb1658a51bec611e78f7ba (patch) | |
| tree | 2e6f416aac4b0a5668976db500ada1bdcc2b399e /sapi/phpdbg/phpdbg_sigsafe.c | |
| parent | 5f91b0a3c717f109ffb7dc684d5a3fa8905b82ec (diff) | |
| parent | 0a5b7d1316a778dc06a638869c8df8d4c989ddf0 (diff) | |
| download | php-git-e33ba844e52c5dc8e2fb1658a51bec611e78f7ba.tar.gz | |
Merge branch 'master' of https://git.php.net/push/php-src
* 'master' of https://git.php.net/push/php-src: (164 commits)
refix the broken place
fix infinite loop
fix datatype mismatch warnings
fix datatype mismatches
fix datatype mismatches
fix datatype mismatches
fix datatype mismatch warnings
fix datatype mismatch warnings
fix datatype mismatch warnings
fix datatype mismatch warning
fix datatype mismatches
fix datatype mismatch warnings
Re-add phpdbg to travis
Added some NEWS
Make xml valid (missing space between attrs)
Fix info classes file name in xml
Add note about <eval> tag for errors in xml.md
Name the tag <eval> if the error id during ev cmd
Do not print out xml as PHP print...
Fix output to wrong function
...
Diffstat (limited to 'sapi/phpdbg/phpdbg_sigsafe.c')
| -rw-r--r-- | sapi/phpdbg/phpdbg_sigsafe.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/sapi/phpdbg/phpdbg_sigsafe.c b/sapi/phpdbg/phpdbg_sigsafe.c new file mode 100644 index 0000000000..1ca7bf230c --- /dev/null +++ b/sapi/phpdbg/phpdbg_sigsafe.c @@ -0,0 +1,56 @@ +#include "phpdbg_sigsafe.h" +#include "phpdbg.h" + +ZEND_EXTERN_MODULE_GLOBALS(phpdbg); + +#define STR(x) #x +#define EXP_STR(x) STR(x) + +static void* zend_mm_mem_alloc(zend_mm_storage *storage, size_t size, size_t alignment) { + TSRMLS_FETCH(); + + if (EXPECTED(size == PHPDBG_SIGSAFE_MEM_SIZE && !PHPDBG_G(sigsafe_mem).allocated)) { + PHPDBG_G(sigsafe_mem).allocated = 1; + return PHPDBG_G(sigsafe_mem).mem; + } + + write(PHPDBG_G(io)[PHPDBG_STDERR].fd, ZEND_STRL("Tried to allocate more than " EXP_STR(PHPDBG_SIGSAFE_MEM_SIZE) " bytes from stack memory in signal handler ... bailing out of signal handler\n")); + + if (*EG(bailout)) { + LONGJMP(*EG(bailout), FAILURE); + } + + write(PHPDBG_G(io)[PHPDBG_STDERR].fd, ZEND_STRL("Bailed out without a bailout address in signal handler!\n")); + + return NULL; +} + +static void zend_mm_mem_free(zend_mm_storage *storage, void *ptr, size_t size) { +} + +void phpdbg_set_sigsafe_mem(char *buffer TSRMLS_DC) { + phpdbg_signal_safe_mem *mem = &PHPDBG_G(sigsafe_mem); + mem->mem = buffer; + mem->allocated = 0; + + mem->storage.chunk_alloc = zend_mm_mem_alloc; + mem->storage.chunk_free = zend_mm_mem_free; + + mem->heap = zend_mm_startup_ex(&mem->storage); + + mem->old_heap = zend_mm_set_heap(mem->heap TSRMLS_CC); +} + +zend_mm_heap *phpdbg_original_heap_sigsafe_mem(TSRMLS_D) { + return PHPDBG_G(sigsafe_mem).old_heap; +} + +void phpdbg_clear_sigsafe_mem(TSRMLS_D) { + zend_mm_set_heap(phpdbg_original_heap_sigsafe_mem(TSRMLS_C) TSRMLS_CC); + PHPDBG_G(sigsafe_mem).mem = NULL; +} + +zend_bool phpdbg_active_sigsafe_mem(TSRMLS_D) { + return !!PHPDBG_G(sigsafe_mem).mem; +} + |
