diff options
Diffstat (limited to 'ext/standard/assert.c')
-rw-r--r-- | ext/standard/assert.c | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/ext/standard/assert.c b/ext/standard/assert.c index b8e42ed6df..7100c5c347 100644 --- a/ext/standard/assert.c +++ b/ext/standard/assert.c @@ -137,11 +137,21 @@ PHP_FUNCTION(assert) WRONG_PARAM_COUNT; } - if (Z_TYPE_PP(assertion) == IS_STRING) { + if (Z_TYPE_PP(assertion) == IS_STRING || Z_TYPE_PP(assertion) == IS_UNICODE) { zval retval; + zval tmp; int old_error_reporting = 0; /* shut up gcc! */ - - myeval = Z_STRVAL_PP(assertion); + int free_tmp = 0; + + if (Z_TYPE_PP(assertion) == IS_UNICODE) { + tmp = **assertion; + zval_copy_ctor(&tmp); + convert_to_string(&tmp); + myeval = Z_STRVAL(tmp); + free_tmp = 1; + } else { + myeval = Z_STRVAL_PP(assertion); + } if (ASSERTG(quiet_eval)) { old_error_reporting = EG(error_reporting); @@ -154,6 +164,9 @@ PHP_FUNCTION(assert) php_error_docref(NULL TSRMLS_CC, E_ERROR, "Failure evaluating code:\n%s", myeval); /* php_error_docref() does not return in this case. */ } + if (free_tmp) { + zval_dtor(&tmp); + } efree(compiled_string_description); if (ASSERTG(quiet_eval)) { @@ -184,7 +197,11 @@ PHP_FUNCTION(assert) ZVAL_STRING(args[0], SAFE_STRING(filename), 1); ZVAL_LONG (args[1], lineno); - ZVAL_STRING(args[2], SAFE_STRING(myeval), 1); + if (Z_TYPE_PP(assertion) == IS_UNICODE) { + ZVAL_UNICODEL(args[2], Z_USTRVAL_PP(assertion), Z_USTRLEN_PP(assertion), 1); + } else { + ZVAL_STRING(args[2], SAFE_STRING(myeval), 1); + } MAKE_STD_ZVAL(retval); ZVAL_FALSE(retval); |