diff options
| author | Marcus Boerger <helly@php.net> | 2006-07-09 22:45:11 +0000 |
|---|---|---|
| committer | Marcus Boerger <helly@php.net> | 2006-07-09 22:45:11 +0000 |
| commit | dd5cbcd24c9c6b6ab1adc0c702e5da25d7c44886 (patch) | |
| tree | 3640d245b58cd2b3cf1b427fee1bbbb04a11ca66 /Zend/zend_builtin_functions.c | |
| parent | c514ee0c9b43c86beb87ae78e92692bb1f3204e1 (diff) | |
| download | php-git-dd5cbcd24c9c6b6ab1adc0c702e5da25d7c44886.tar.gz | |
- Fixed Bug #37811 define not using toString on objects
Diffstat (limited to 'Zend/zend_builtin_functions.c')
| -rw-r--r-- | Zend/zend_builtin_functions.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 500c3c8879..0aa81a487c 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -452,7 +452,7 @@ ZEND_FUNCTION(error_reporting) Define a new constant */ ZEND_FUNCTION(define) { - zval **var, **val, **non_cs; + zval **var, **val, **non_cs, *val_free = NULL; int case_sensitive; zend_constant c; @@ -479,6 +479,7 @@ ZEND_FUNCTION(define) break; } +repeat: switch (Z_TYPE_PP(val)) { case IS_LONG: case IS_DOUBLE: @@ -487,15 +488,34 @@ ZEND_FUNCTION(define) case IS_RESOURCE: case IS_NULL: break; + case IS_OBJECT: + if (!val_free) { + if (Z_OBJ_HT_PP(val)->get) { + val_free = *val = Z_OBJ_HT_PP(val)->get(*val TSRMLS_CC); + goto repeat; + } else if (Z_OBJ_HT_PP(val)->cast_object) { + ALLOC_INIT_ZVAL(val_free); + if (Z_OBJ_HT_PP(val)->cast_object(*val, val_free, IS_STRING TSRMLS_CC) == SUCCESS) { + val = &val_free; + break; + } + } + } + /* no break */ default: zend_error(E_WARNING,"Constants may only evaluate to scalar values"); + if (val_free) { + zval_ptr_dtor(&val_free); + } RETURN_FALSE; - break; } convert_to_string_ex(var); c.value = **val; zval_copy_ctor(&c.value); + if (val_free) { + zval_ptr_dtor(&val_free); + } c.flags = case_sensitive; /* non persistent */ c.name = zend_strndup((*var)->value.str.val, (*var)->value.str.len); c.name_len = (*var)->value.str.len+1; |
