summaryrefslogtreecommitdiff
path: root/ext/standard/assert.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/assert.c')
-rw-r--r--ext/standard/assert.c25
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);