mirror of
https://github.com/php/php-src.git
synced 2025-08-18 06:58:55 +02:00
Added zend_eval_stringl and made create_function(), etc. binary-safe
This commit is contained in:
parent
88127e2328
commit
e9b382cc2e
8 changed files with 75 additions and 33 deletions
|
@ -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_eval_string(char *str, zval *retval_ptr, char *string_name TSRMLS_DC) /* {{{ */
|
||||
ZEND_API int zend_u_eval_string(zend_uchar type, zstr 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(type, str, ZSTR_LEN(type, 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_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_stringl(IS_STRING, ZSTR(str), strlen(str), retval_ptr, string_name TSRMLS_CC);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
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);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue