From 9db4e25927990ea31230a3b0463df459a237060c Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Wed, 22 Apr 2015 15:14:00 +0800 Subject: [PATCH] Since 5.6 stat.cwd using emalloc (Thanks to Remi) --- ext/opcache/ZendAccelerator.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index 2d1be39ba72..726003725c0 100644 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@ -1707,17 +1707,23 @@ zend_op_array *persistent_compile_file(zend_file_handle *file_handle, int type T static char *accel_tsrm_realpath(const char *path, int path_len TSRMLS_DC) { cwd_state new_state; +#if ZEND_EXTENSION_API_NO < PHP_5_6_X_API_NO char *real_path; +#endif char *cwd; int cwd_len; /* realpath("") returns CWD */ if (!*path) { +#if ZEND_EXTENSION_API_NO > PHP_5_5_X_API_NO + new_state.cwd = (char*)emalloc(1); +#else new_state.cwd = (char*)malloc(1); if (!new_state.cwd) { zend_accel_error(ACCEL_LOG_ERROR, "malloc() failed"); return NULL; } +#endif new_state.cwd[0] = '\0'; new_state.cwd_length = 0; if ((cwd = accel_getcwd(&cwd_len TSRMLS_CC)) != NULL) { @@ -1725,18 +1731,26 @@ static char *accel_tsrm_realpath(const char *path, int path_len TSRMLS_DC) } } else if (!IS_ABSOLUTE_PATH(path, path_len) && (cwd = accel_getcwd(&cwd_len TSRMLS_CC)) != NULL) { +#if ZEND_EXTENSION_API_NO > PHP_5_5_X_API_NO + new_state.cwd = estrndup(cwd, cwd_len); +#else new_state.cwd = zend_strndup(cwd, cwd_len); if (!new_state.cwd) { zend_accel_error(ACCEL_LOG_ERROR, "malloc() failed"); return NULL; } +#endif new_state.cwd_length = cwd_len; } else { +#if ZEND_EXTENSION_API_NO > PHP_5_5_X_API_NO + new_state.cwd = (char*)emalloc(1); +#else new_state.cwd = (char*)malloc(1); if (!new_state.cwd) { zend_accel_error(ACCEL_LOG_ERROR, "malloc() failed"); return NULL; } +#endif new_state.cwd[0] = '\0'; new_state.cwd_length = 0; } @@ -1745,14 +1759,22 @@ static char *accel_tsrm_realpath(const char *path, int path_len TSRMLS_DC) # define CWD_REALPATH 2 #endif if (virtual_file_ex(&new_state, path, NULL, CWD_REALPATH)) { +#if ZEND_EXTENSION_API_NO > PHP_5_5_X_API_NO + efree(new_state.cwd); +#else free(new_state.cwd); +#endif return NULL; } +#if ZEND_EXTENSION_API_NO > PHP_5_5_X_API_NO + return new_state.cwd; +#else real_path = emalloc(new_state.cwd_length + 1); memcpy(real_path, new_state.cwd, new_state.cwd_length + 1); free(new_state.cwd); return real_path; +#endif } static char *accel_php_resolve_path(const char *filename, int filename_length, const char *path TSRMLS_DC)