]> granicus.if.org Git - php/commitdiff
update zend_make_printable_zval to take TSRM context
authorkrakjoe <joe.watkins@live.co.uk>
Mon, 11 Aug 2014 05:09:46 +0000 (06:09 +0100)
committerkrakjoe <joe.watkins@live.co.uk>
Mon, 11 Aug 2014 05:09:46 +0000 (06:09 +0100)
12 files changed:
Zend/zend.c
Zend/zend.h
Zend/zend_API.c
Zend/zend_operators.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h
ext/intl/collator/collator_convert.c
ext/opcache/Optimizer/compact_literals.c
ext/spl/spl_iterators.c
ext/sybase_ct/php_sybase_ct.c
main/snprintf.c
main/spprintf.c

index b83b38fb9bcab7822342c1b53ace6c867c4cfb52..652021a6d567481e57c0ff33cdfc5c1751ddd5bb 100644 (file)
@@ -212,7 +212,7 @@ static void print_flat_hash(HashTable *ht TSRMLS_DC) /* {{{ */
 }
 /* }}} */
 
-ZEND_API int zend_make_printable_zval(zval *expr, zval *expr_copy) /* {{{ */
+ZEND_API int zend_make_printable_zval(zval *expr, zval *expr_copy TSRMLS_DC) /* {{{ */
 {
        if (Z_TYPE_P(expr) == IS_STRING) {
                return 0;
@@ -221,20 +221,16 @@ ZEND_API int zend_make_printable_zval(zval *expr, zval *expr_copy) /* {{{ */
 again:
        switch (Z_TYPE_P(expr)) {
                case IS_NULL:
-               case IS_FALSE: {
-                       TSRMLS_FETCH();
+               case IS_FALSE:
                        ZVAL_EMPTY_STRING(expr_copy);
-                       break;
-               }
-               case IS_TRUE: {
-                   TSRMLS_FETCH();
+                   break;
+               case IS_TRUE:
                    if (CG(one_char_string)['1']) {
                                ZVAL_INT_STR(expr_copy, CG(one_char_string)['1']);
                        } else {
                                ZVAL_NEW_STR(expr_copy, STR_INIT("1", 1, 0));
                        }
-                       break;
-               }
+                   break;
                case IS_RESOURCE: {
                                char buf[sizeof("Resource id #") + MAX_LENGTH_OF_LONG];
                                int len;
@@ -249,35 +245,31 @@ again:
                        ZVAL_NEW_STR(expr_copy, STR_INIT("Array", sizeof("Array") - 1, 0));
                        break;
                case IS_OBJECT:
-                       {
-                               TSRMLS_FETCH();
-
-                               if (Z_OBJ_HANDLER_P(expr, cast_object)) {
-                                       Z_ADDREF_P(expr);
-                                       if (Z_OBJ_HANDLER_P(expr, cast_object)(expr, expr_copy, IS_STRING TSRMLS_CC) == SUCCESS) {
-                                               zval_ptr_dtor(expr);
-                                               break;
-                                       }
+                       if (Z_OBJ_HANDLER_P(expr, cast_object)) {
+                               Z_ADDREF_P(expr);
+                               if (Z_OBJ_HANDLER_P(expr, cast_object)(expr, expr_copy, IS_STRING TSRMLS_CC) == SUCCESS) {
                                        zval_ptr_dtor(expr);
+                                       break;
                                }
-                               if (!Z_OBJ_HANDLER_P(expr, cast_object) && Z_OBJ_HANDLER_P(expr, get)) {
-                                       zval rv;
-                                       zval *z = Z_OBJ_HANDLER_P(expr, get)(expr, &rv TSRMLS_CC);
-
-                                       Z_ADDREF_P(z);
-                                       if (Z_TYPE_P(z) != IS_OBJECT) {
-                                               if (zend_make_printable_zval(z, expr_copy)) {
-                                                       zval_ptr_dtor(z);
-                                               } else {
-                                                       ZVAL_ZVAL(expr_copy, z, 0, 1);
-                                               }
-                                               return 1;
+                               zval_ptr_dtor(expr);
+                       }
+                       if (!Z_OBJ_HANDLER_P(expr, cast_object) && Z_OBJ_HANDLER_P(expr, get)) {
+                               zval rv;
+                               zval *z = Z_OBJ_HANDLER_P(expr, get)(expr, &rv TSRMLS_CC);
+
+                               Z_ADDREF_P(z);
+                               if (Z_TYPE_P(z) != IS_OBJECT) {
+                                       if (zend_make_printable_zval(z, expr_copy TSRMLS_CC)) {
+                                               zval_ptr_dtor(z);
+                                       } else {
+                                               ZVAL_ZVAL(expr_copy, z, 0, 1);
                                        }
-                                       zval_ptr_dtor(z);
+                                       return 1;
                                }
-                               zend_error(EG(exception) ? E_ERROR : E_RECOVERABLE_ERROR, "Object of class %s could not be converted to string", Z_OBJCE_P(expr)->name->val);
-                               ZVAL_EMPTY_STRING(expr_copy);
+                               zval_ptr_dtor(z);
                        }
+                       zend_error(EG(exception) ? E_ERROR : E_RECOVERABLE_ERROR, "Object of class %s could not be converted to string", Z_OBJCE_P(expr)->name->val);
+                       ZVAL_EMPTY_STRING(expr_copy);
                        break;
                case IS_DOUBLE:
                        ZVAL_DUP(expr_copy, expr);
index 1021829c3b2116d51264c92432ccc74e3497b401..c071acd87dbb39b8d9047c71ab290feee57b4e34 100644 (file)
@@ -609,7 +609,7 @@ END_EXTERN_C()
 
 BEGIN_EXTERN_C()
 ZEND_API char *get_zend_version(void);
-ZEND_API int zend_make_printable_zval(zval *expr, zval *expr_copy);
+ZEND_API int zend_make_printable_zval(zval *expr, zval *expr_copy TSRMLS_DC);
 ZEND_API int zend_print_zval(zval *expr, int indent TSRMLS_DC);
 ZEND_API int zend_print_zval_ex(zend_write_func_t write_func, zval *expr, int indent TSRMLS_DC);
 ZEND_API void zend_print_zval_r(zval *expr, int indent TSRMLS_DC);
index 5baa26ea54fc73290a62eba76e9d08f022e25685..9881740c06fdc63de929b54b6d024ccb8c32ffdc 100644 (file)
@@ -249,7 +249,7 @@ static int parse_arg_object_to_string(zval *arg, char **p, int *pl, int type TSR
                if(Z_TYPE_P(z) != IS_OBJECT) {
                        zval_dtor(arg);
                        ZVAL_NULL(arg);
-                       if (!zend_make_printable_zval(z, arg)) {
+                       if (!zend_make_printable_zval(z, arg TSRMLS_CC)) {
                                ZVAL_ZVAL(arg, z, 1, 1);
                        }
                        *pl = Z_STRLEN_P(arg);
@@ -288,7 +288,7 @@ ZEND_API int parse_arg_object_to_str(zval *arg, zend_string **str, int type TSRM
                if(Z_TYPE_P(z) != IS_OBJECT) {
                        zval_dtor(arg);
                        ZVAL_NULL(arg);
-                       if (!zend_make_printable_zval(z, arg)) {
+                       if (!zend_make_printable_zval(z, arg TSRMLS_CC)) {
                                ZVAL_ZVAL(arg, z, 1, 1);
                        }
                        *str = Z_STR_P(arg);
index dc2756fe099156e4901110f759acb6d98df57d72..c34b5c7f3221746a8f0f2c04b6bdc68589b9e804 100644 (file)
@@ -1552,10 +1552,10 @@ ZEND_API int concat_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{
                ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_CONCAT);
 
                if (Z_TYPE_P(op1) != IS_STRING) {
-                       use_copy1 = zend_make_printable_zval(op1, &op1_copy);
+                       use_copy1 = zend_make_printable_zval(op1, &op1_copy TSRMLS_CC);
                }
                if (Z_TYPE_P(op2) != IS_STRING) {
-                       use_copy2 = zend_make_printable_zval(op2, &op2_copy);
+                       use_copy2 = zend_make_printable_zval(op2, &op2_copy TSRMLS_CC);
                }
        }
 
index b7ada26af09c59ef28f8e2383fcfc6a4a46a755a..23e2254ea16bf67cdde84c2d46fa3f7d6db0c4ce 100644 (file)
@@ -2124,7 +2124,7 @@ ZEND_VM_HANDLER(56, ZEND_ADD_VAR, TMP|UNUSED, TMP|VAR|CV)
        if (Z_TYPE_P(var) != IS_STRING) {
                ZVAL_DEREF(var);
                if (Z_TYPE_P(var) != IS_STRING) {
-                       use_copy = zend_make_printable_zval(var, &var_copy);
+                       use_copy = zend_make_printable_zval(var, &var_copy TSRMLS_CC);
 
                        if (use_copy) {
                                var = &var_copy;
index d30f4eae26151140b5dd74dd18823e508b00ce28..65ad7b29f339393fdb6ec7bb45e6d38ad0577850 100644 (file)
@@ -10334,7 +10334,7 @@ static int ZEND_FASTCALL  ZEND_ADD_VAR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_
        if (Z_TYPE_P(var) != IS_STRING) {
                ZVAL_DEREF(var);
                if (Z_TYPE_P(var) != IS_STRING) {
-                       use_copy = zend_make_printable_zval(var, &var_copy);
+                       use_copy = zend_make_printable_zval(var, &var_copy TSRMLS_CC);
 
                        if (use_copy) {
                                var = &var_copy;
@@ -11174,7 +11174,7 @@ static int ZEND_FASTCALL  ZEND_ADD_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_
        if (Z_TYPE_P(var) != IS_STRING) {
                ZVAL_DEREF(var);
                if (Z_TYPE_P(var) != IS_STRING) {
-                       use_copy = zend_make_printable_zval(var, &var_copy);
+                       use_copy = zend_make_printable_zval(var, &var_copy TSRMLS_CC);
 
                        if (use_copy) {
                                var = &var_copy;
@@ -12567,7 +12567,7 @@ static int ZEND_FASTCALL  ZEND_ADD_VAR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_A
        if (Z_TYPE_P(var) != IS_STRING) {
                ZVAL_DEREF(var);
                if (Z_TYPE_P(var) != IS_STRING) {
-                       use_copy = zend_make_printable_zval(var, &var_copy);
+                       use_copy = zend_make_printable_zval(var, &var_copy TSRMLS_CC);
 
                        if (use_copy) {
                                var = &var_copy;
@@ -26721,7 +26721,7 @@ static int ZEND_FASTCALL  ZEND_ADD_VAR_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDL
        if (Z_TYPE_P(var) != IS_STRING) {
                ZVAL_DEREF(var);
                if (Z_TYPE_P(var) != IS_STRING) {
-                       use_copy = zend_make_printable_zval(var, &var_copy);
+                       use_copy = zend_make_printable_zval(var, &var_copy TSRMLS_CC);
 
                        if (use_copy) {
                                var = &var_copy;
@@ -28002,7 +28002,7 @@ static int ZEND_FASTCALL  ZEND_ADD_VAR_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDL
        if (Z_TYPE_P(var) != IS_STRING) {
                ZVAL_DEREF(var);
                if (Z_TYPE_P(var) != IS_STRING) {
-                       use_copy = zend_make_printable_zval(var, &var_copy);
+                       use_copy = zend_make_printable_zval(var, &var_copy TSRMLS_CC);
 
                        if (use_copy) {
                                var = &var_copy;
@@ -29794,7 +29794,7 @@ static int ZEND_FASTCALL  ZEND_ADD_VAR_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLE
        if (Z_TYPE_P(var) != IS_STRING) {
                ZVAL_DEREF(var);
                if (Z_TYPE_P(var) != IS_STRING) {
-                       use_copy = zend_make_printable_zval(var, &var_copy);
+                       use_copy = zend_make_printable_zval(var, &var_copy TSRMLS_CC);
 
                        if (use_copy) {
                                var = &var_copy;
index e1ec3b1631fd6228be18b6a218791cc63e37b940..1d8681582c3a4d2254183deca2b9332a036ae141 100644 (file)
@@ -392,7 +392,7 @@ zval* collator_convert_string_to_number_if_possible( zval* str, zval *rv )
  *
  * @return zval* UTF16 string.
  */
-zval* collator_make_printable_zval( zval* arg, zval *rv )
+zval* collator_make_printable_zval( zval* arg, zval *rv)
 {
        zval arg_copy;
        int use_copy = 0;
@@ -400,7 +400,9 @@ zval* collator_make_printable_zval( zval* arg, zval *rv )
 
        if( Z_TYPE_P(arg) != IS_STRING )
        {
-               use_copy = zend_make_printable_zval(arg, &arg_copy);
+           TSRMLS_FETCH();
+           
+               use_copy = zend_make_printable_zval(arg, &arg_copy TSRMLS_CC);
 
                if( use_copy )
                {
index b97fda9ab1cc803ef4d21ab65bc45b01e036d7a0..f13bf50699ea45d8159c9ec6d78e4fcc1d6ec3c6 100644 (file)
@@ -273,7 +273,7 @@ static void optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_c
 
                        for (i = 0; i < op_array->last_literal; i++) {
                                zval zv = op_array->literals[i].constant;
-                               use_copy = zend_make_printable_zval(&op_array->literals[i].constant, &zv);
+                               use_copy = zend_make_printable_zval(&op_array->literals[i].constant, &zv TSRMLS_CC);
                                fprintf(stderr, "Literal %d, val (%d):%s\n", i, Z_STRLEN(zv), Z_STRVAL(zv));
                                if (use_copy) {
                                        zval_dtor(&zv);
@@ -454,7 +454,7 @@ static void optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_c
 
                        for (i = 0; i < op_array->last_literal; i++) {
                                zval zv = op_array->literals[i].constant;
-                               use_copy = zend_make_printable_zval(&op_array->literals[i].constant, &zv);
+                               use_copy = zend_make_printable_zval(&op_array->literals[i].constant, &zv TSRMLS_CC);
                                fprintf(stderr, "Literal %d, val (%d):%s\n", i, Z_STRLEN(zv), Z_STRVAL(zv));
                                if (use_copy) {
                                        zval_dtor(&zv);
index 29c1c17e8ad586df22aed69ae7d3b855da0beea1..270262828022dd4db148e92c210665bc8922ef62 100644 (file)
@@ -1270,7 +1270,7 @@ SPL_METHOD(RecursiveTreeIterator, key)
        }
 
        if (Z_TYPE(key) != IS_STRING) {
-               if (zend_make_printable_zval(&key, &key_copy)) {
+               if (zend_make_printable_zval(&key, &key_copy TSRMLS_CC)) {
                        key = key_copy;
                }
        }
@@ -2047,7 +2047,7 @@ SPL_METHOD(RegexIterator, accept)
        }
 
        ZVAL_UNDEF(&subject_copy);
-       use_copy = zend_make_printable_zval(subject_ptr, &subject_copy);
+       use_copy = zend_make_printable_zval(subject_ptr, &subject_copy TSRMLS_CC);
        if (use_copy) {
                subject = Z_STRVAL(subject_copy);
                subject_len = Z_STRLEN(subject_copy);
@@ -2684,7 +2684,7 @@ static inline void spl_caching_it_next(spl_dual_it_object *intern TSRMLS_DC)
                        } else {
                                ZVAL_COPY_VALUE(&intern->u.caching.zstr, &intern->current.data);
                        }
-                       use_copy = zend_make_printable_zval(&intern->u.caching.zstr, &expr_copy);
+                       use_copy = zend_make_printable_zval(&intern->u.caching.zstr, &expr_copy TSRMLS_CC);
                        if (use_copy) {
                                ZVAL_COPY(&intern->u.caching.zstr, &expr_copy);
 //???                  INIT_PZVAL(intern->u.caching.zstr);
index aaa0c79faeed893428451dc69fd7a0c0ce864178..97aa204892c2866c08a659b5da26796c3d7565a4 100644 (file)
@@ -442,7 +442,7 @@ static int _call_message_handler(zval *callback_name, CS_SERVERMSG *srvmsg TSRML
                zval expr_copy;
                int use_copy;
 
-               use_copy = zend_make_printable_zval(callback_name, &expr_copy);
+               use_copy = zend_make_printable_zval(callback_name, &expr_copy TSRMLS_CC);
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase:  Cannot call the messagehandler %s", Z_STRVAL(expr_copy));
                zval_dtor(&expr_copy);
        }
index f26206d851daedfb45bccd71e4c3bfca50946b5e..914cac713344cecc81998637df0466c1287bb93b 100644 (file)
@@ -781,9 +781,10 @@ static int format_converter(register buffy * odp, const char *fmt, va_list ap) /
                         *   It is reset to ' ' by non-numeric formats
                         */
                        switch (*fmt) {
-                               case 'Z':
-                                       zvp = (zval*) va_arg(ap, zval*);
-                                       free_zcopy = zend_make_printable_zval(zvp, &zcopy);
+                               case 'Z': {
+                                   TSRMLS_FETCH();
+                                   zvp = (zval*) va_arg(ap, zval*);
+                                       free_zcopy = zend_make_printable_zval(zvp, &zcopy TSRMLS_CC);
                                        if (free_zcopy) {
                                                zvp = &zcopy;
                                        }
@@ -791,8 +792,9 @@ static int format_converter(register buffy * odp, const char *fmt, va_list ap) /
                                        s = Z_STRVAL_P(zvp);
                                        if (adjust_precision && precision < s_len) {
                                                s_len = precision;
-                                       }
+                                       }       
                                        break;
+                               }
                                case 'u':
                                        switch(modifier) {
                                                default:
index 12027f756e01ae12b3effcedfc8f4ee46a014044..079089c0fc374b4c74d1acdf44e42cff34c82423 100644 (file)
@@ -389,9 +389,10 @@ static void xbuf_format_converter(void *xbuf, zend_bool is_char, const char *fmt
                         *   It is reset to ' ' by non-numeric formats
                         */
                        switch (*fmt) {
-                               case 'Z':
+                               case 'Z': {
+                                       TSRMLS_FETCH();
                                        zvp = (zval*) va_arg(ap, zval*);
-                                       free_zcopy = zend_make_printable_zval(zvp, &zcopy);
+                                       free_zcopy = zend_make_printable_zval(zvp, &zcopy TSRMLS_CC);
                                        if (free_zcopy) {
                                                zvp = &zcopy;
                                        }
@@ -401,6 +402,7 @@ static void xbuf_format_converter(void *xbuf, zend_bool is_char, const char *fmt
                                                s_len = precision;
                                        }
                                        break;
+                               }
                                case 'u':
                                        switch(modifier) {
                                                default: