diff options
| author | Matt Wilmas <mattwil@php.net> | 2009-06-05 18:50:32 +0000 |
|---|---|---|
| committer | Matt Wilmas <mattwil@php.net> | 2009-06-05 18:50:32 +0000 |
| commit | d55300298e0e3ec0bdbb58ff3dcfda113d21852e (patch) | |
| tree | f8efe461ea2aab77c8d712d7954c09fc481095b6 /Zend/zend_execute_API.c | |
| parent | a80be6827dd734ddb33dbf8b177a3d70a20cd9b5 (diff) | |
| download | php-git-d55300298e0e3ec0bdbb58ff3dcfda113d21852e.tar.gz | |
MFH: Added zend_eval_stringl and made create_function(), etc. binary-safe
Diffstat (limited to 'Zend/zend_execute_API.c')
| -rw-r--r-- | Zend/zend_execute_API.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index fba98d583e..6b51eb156c 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -1116,7 +1116,7 @@ ZEND_API int zend_lookup_class(const char *name, int name_length, zend_class_ent } /* }}} */ -ZEND_API int zend_eval_string(char *str, zval *retval_ptr, char *string_name TSRMLS_DC) /* {{{ */ +ZEND_API int zend_eval_stringl(char *str, int str_len, zval *retval_ptr, char *string_name TSRMLS_DC) /* {{{ */ { zval pv; zend_op_array *new_op_array; @@ -1125,15 +1125,14 @@ ZEND_API int zend_eval_string(char *str, zval *retval_ptr, char *string_name TSR int retval; 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; } Z_TYPE(pv) = IS_STRING; @@ -1188,11 +1187,17 @@ ZEND_API int zend_eval_string(char *str, zval *retval_ptr, char *string_name TSR } /* }}} */ -ZEND_API int zend_eval_string_ex(char *str, zval *retval_ptr, char *string_name, int handle_exceptions TSRMLS_DC) /* {{{ */ +ZEND_API int zend_eval_string(char *str, zval *retval_ptr, char *string_name TSRMLS_DC) /* {{{ */ +{ + return zend_eval_stringl(str, strlen(str), retval_ptr, string_name 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) /* {{{ */ { int result; - result = zend_eval_string(str, retval_ptr, string_name TSRMLS_CC); + result = zend_eval_stringl(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; @@ -1201,6 +1206,12 @@ ZEND_API int zend_eval_string_ex(char *str, zval *retval_ptr, char *string_name, } /* }}} */ +ZEND_API int zend_eval_string_ex(char *str, zval *retval_ptr, char *string_name, int handle_exceptions TSRMLS_DC) /* {{{ */ +{ + return zend_eval_stringl_ex(str, strlen(str), retval_ptr, string_name, handle_exceptions TSRMLS_CC); +} +/* }}} */ + void execute_new_code(TSRMLS_D) /* {{{ */ { zend_op *opline, *end; |
