diff options
Diffstat (limited to 'Zend/zend_execute_API.c')
-rw-r--r-- | Zend/zend_execute_API.c | 48 |
1 files changed, 35 insertions, 13 deletions
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index 098eff991c..b31b0b798c 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -1191,7 +1191,7 @@ ZEND_API int zend_lookup_class(char *name, int name_length, zend_class_entry *** } /* }}} */ -ZEND_API int zend_u_eval_string(zend_uchar type, zstr string, zval *retval_ptr, char *string_name TSRMLS_DC) /* {{{ */ +ZEND_API int zend_u_eval_stringl(zend_uchar type, zstr string, int str_len, zval *retval_ptr, char *string_name TSRMLS_DC) /* {{{ */ { zval pv; zend_op_array *new_op_array; @@ -1203,30 +1203,28 @@ ZEND_API int zend_u_eval_string(zend_uchar type, zstr string, zval *retval_ptr, UChar *str = string.u; if (retval_ptr) { - int l = u_strlen(str); - Z_USTRLEN(pv) = l + sizeof("return ;") - 1; + Z_USTRLEN(pv) = str_len + sizeof("return ;") - 1; Z_USTRVAL(pv) = eumalloc(Z_USTRLEN(pv) + 1); u_memcpy(Z_USTRVAL(pv), u_return, sizeof("return ") - 1); - u_memcpy(Z_USTRVAL(pv) + sizeof("return ") - 1, str, l); + u_memcpy(Z_USTRVAL(pv) + sizeof("return ") - 1, str, str_len); Z_USTRVAL(pv)[Z_USTRLEN(pv) - 1] = 0x3B /*';'*/; Z_USTRVAL(pv)[Z_USTRLEN(pv)] = 0; } else { - Z_USTRLEN(pv) = u_strlen(str); + Z_USTRLEN(pv) = str_len; Z_USTRVAL(pv) = str; } } else { char *str = string.s; if (retval_ptr) { - int l = strlen(str); - Z_STRLEN(pv) = l + sizeof("return ;") - 1; + Z_STRLEN(pv) = str_len + sizeof("return ;") - 1; Z_STRVAL(pv) = emalloc(Z_STRLEN(pv) + 1); memcpy(Z_STRVAL(pv), "return ", sizeof("return ") - 1); - memcpy(Z_STRVAL(pv) + sizeof("return ") - 1, str, l); + memcpy(Z_STRVAL(pv) + sizeof("return ") - 1, str, str_len); Z_STRVAL(pv)[Z_STRLEN(pv) - 1] = ';'; Z_STRVAL(pv)[Z_STRLEN(pv)] = '\0'; } else { - Z_STRLEN(pv) = strlen(str); + Z_STRLEN(pv) = str_len; Z_STRVAL(pv) = str; } } @@ -1282,17 +1280,29 @@ ZEND_API int zend_u_eval_string(zend_uchar type, zstr string, zval *retval_ptr, } /* }}} */ +ZEND_API int zend_u_eval_string(zend_uchar type, zstr str, zval *retval_ptr, char *string_name TSRMLS_DC) /* {{{ */ +{ + return zend_u_eval_stringl(type, str, ZSTR_LEN(type, str), retval_ptr, string_name TSRMLS_CC); +} +/* }}} */ + +ZEND_API int zend_eval_stringl(char *str, int str_len, zval *retval_ptr, char *string_name TSRMLS_DC) /* {{{ */ +{ + return zend_u_eval_stringl(IS_STRING, ZSTR(str), str_len, retval_ptr, string_name TSRMLS_CC); +} +/* }}} */ + ZEND_API int zend_eval_string(char *str, zval *retval_ptr, char *string_name TSRMLS_DC) /* {{{ */ { - return zend_u_eval_string(IS_STRING, ZSTR(str), retval_ptr, string_name TSRMLS_CC); + return zend_u_eval_stringl(IS_STRING, ZSTR(str), strlen(str), retval_ptr, string_name TSRMLS_CC); } /* }}} */ -ZEND_API int zend_u_eval_string_ex(zend_uchar type, zstr str, zval *retval_ptr, char *string_name, int handle_exceptions TSRMLS_DC) /* {{{ */ +ZEND_API int zend_u_eval_stringl_ex(zend_uchar type, zstr str, int str_len, zval *retval_ptr, char *string_name, int handle_exceptions TSRMLS_DC) /* {{{ */ { int result; - result = zend_u_eval_string(type, str, retval_ptr, string_name TSRMLS_CC); + result = zend_u_eval_stringl(type, str, str_len, retval_ptr, string_name TSRMLS_CC); if (handle_exceptions && EG(exception)) { zend_exception_error(EG(exception), E_ERROR TSRMLS_CC); result = FAILURE; @@ -1301,9 +1311,21 @@ ZEND_API int zend_u_eval_string_ex(zend_uchar type, zstr str, zval *retval_ptr, } /* }}} */ +ZEND_API int zend_u_eval_string_ex(zend_uchar type, zstr str, zval *retval_ptr, char *string_name, int handle_exceptions TSRMLS_DC) /* {{{ */ +{ + return zend_u_eval_stringl_ex(type, str, ZSTR_LEN(type, str), retval_ptr, string_name, handle_exceptions TSRMLS_CC); +} +/* }}} */ + +ZEND_API int zend_eval_stringl_ex(char *str, int str_len, zval *retval_ptr, char *string_name, int handle_exceptions TSRMLS_DC) /* {{{ */ +{ + return zend_u_eval_stringl_ex(IS_STRING, ZSTR(str), str_len, retval_ptr, string_name, handle_exceptions TSRMLS_CC); +} +/* }}} */ + ZEND_API int zend_eval_string_ex(char *str, zval *retval_ptr, char *string_name, int handle_exceptions TSRMLS_DC) /* {{{ */ { - return zend_u_eval_string_ex(IS_STRING, ZSTR(str), retval_ptr, string_name, handle_exceptions TSRMLS_CC); + return zend_u_eval_stringl_ex(IS_STRING, ZSTR(str), strlen(str), retval_ptr, string_name, handle_exceptions TSRMLS_CC); } /* }}} */ |