summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_builtin_functions.c5
-rw-r--r--Zend/zend_execute.c12
-rw-r--r--Zend/zend_operators.c33
-rw-r--r--Zend/zend_vm_def.h8
-rw-r--r--Zend/zend_vm_execute.h24
-rw-r--r--ext/date/php_date.c36
-rw-r--r--ext/dom/attr.c4
-rw-r--r--ext/dom/characterdata.c4
-rw-r--r--ext/dom/document.c12
-rw-r--r--ext/dom/node.c12
-rw-r--r--ext/dom/processinginstruction.c4
-rw-r--r--ext/iconv/iconv.c4
-rw-r--r--ext/intl/transliterator/transliterator_class.c7
-rw-r--r--ext/mbstring/mbstring.c8
-rw-r--r--ext/mysqli/mysqli.c14
-rw-r--r--ext/oci8/oci8_statement.c4
-rw-r--r--ext/openssl/openssl.c20
-rw-r--r--ext/openssl/xp_ssl.c8
-rw-r--r--ext/pdo_firebird/firebird_driver.c12
-rw-r--r--ext/pdo_oci/oci_driver.c16
-rw-r--r--ext/pgsql/pgsql.c12
-rw-r--r--ext/reflection/php_reflection.c8
-rw-r--r--ext/simplexml/simplexml.c25
-rw-r--r--ext/snmp/snmp.c14
-rw-r--r--ext/spl/spl_iterators.c4
-rw-r--r--ext/sqlite3/sqlite3.c8
-rw-r--r--ext/standard/assert.c20
-rw-r--r--ext/standard/password.c4
-rw-r--r--ext/standard/string.c4
-rw-r--r--ext/xmlreader/php_xmlreader.c21
-rw-r--r--ext/xsl/xsltprocessor.c11
-rw-r--r--ext/zip/php_zip.c27
32 files changed, 216 insertions, 189 deletions
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index 160fb8a739..6275e9997f 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -736,8 +736,9 @@ ZEND_FUNCTION(error_reporting)
old_error_reporting = EG(error_reporting);
if (ZEND_NUM_ARGS() != 0) {
- zend_string *new_val = zval_get_string(err);
- if (UNEXPECTED(EG(exception))) {
+ zend_string *new_val = zval_try_get_string(err);
+
+ if (UNEXPECTED(!new_val)) {
return;
}
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 8adb6ef3b9..70b050fd09 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -1548,8 +1548,8 @@ static zend_never_inline void zend_assign_to_string_offset(zval *str, zval *dim,
if (Z_TYPE_P(value) != IS_STRING) {
/* Convert to string, just the time to pick the 1st byte */
- zend_string *tmp = zval_get_string_func(value);
- if (UNEXPECTED(EG(exception))) {
+ zend_string *tmp = zval_try_get_string_func(value);
+ if (UNEXPECTED(!tmp)) {
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_UNDEF(EX_VAR(opline->result.var));
}
@@ -4028,11 +4028,13 @@ static zend_never_inline zend_op_array* ZEND_FASTCALL zend_include_or_eval(zval
ZVAL_UNDEF(&tmp_inc_filename);
if (Z_TYPE_P(inc_filename) != IS_STRING) {
- ZVAL_STR(&tmp_inc_filename, zval_get_string_func(inc_filename));
- inc_filename = &tmp_inc_filename;
- if (UNEXPECTED(EG(exception))) {
+ zend_string *tmp = zval_try_get_string_func(inc_filename);
+
+ if (UNEXPECTED(!tmp)) {
return NULL;
}
+ ZVAL_STR(&tmp_inc_filename, tmp);
+ inc_filename = &tmp_inc_filename;
}
switch (type) {
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c
index 896f6dcbe1..3660671396 100644
--- a/Zend/zend_operators.c
+++ b/Zend/zend_operators.c
@@ -607,14 +607,15 @@ try_again:
ZEND_API zend_bool ZEND_FASTCALL _try_convert_to_string(zval *op)
{
- if (Z_TYPE_P(op) != IS_STRING) {
- zend_string *str = zval_get_string_func(op);
- if (UNEXPECTED(EG(exception))) {
- return 0;
- }
- zval_ptr_dtor(op);
- ZVAL_STR(op, str);
+ zend_string *str;
+
+ ZEND_ASSERT(Z_TYPE_P(op) != IS_STRING);
+ str = zval_try_get_string_func(op);
+ if (UNEXPECTED(!str)) {
+ return 0;
}
+ zval_ptr_dtor(op);
+ ZVAL_STR(op, str);
return 1;
}
@@ -865,7 +866,7 @@ try_again:
}
/* }}} */
-ZEND_API zend_string* ZEND_FASTCALL zval_get_string_func(zval *op) /* {{{ */
+static zend_always_inline zend_string* __zval_get_string_func(zval *op, zend_bool try) /* {{{ */
{
try_again:
switch (Z_TYPE_P(op)) {
@@ -896,7 +897,7 @@ try_again:
} else if (Z_OBJ_HT_P(op)->get) {
zval *z = Z_OBJ_HT_P(op)->get(op, &tmp);
if (Z_TYPE_P(z) != IS_OBJECT) {
- zend_string *str = zval_get_string(z);
+ zend_string *str = try ? zval_try_get_string(z) : zval_get_string(z);
zval_ptr_dtor(z);
return str;
}
@@ -905,7 +906,7 @@ try_again:
if (!EG(exception)) {
zend_throw_error(NULL, "Object of class %s could not be converted to string", ZSTR_VAL(Z_OBJCE_P(op)->name));
}
- return ZSTR_EMPTY_ALLOC();
+ return try ? NULL : ZSTR_EMPTY_ALLOC();
}
case IS_REFERENCE:
op = Z_REFVAL_P(op);
@@ -918,13 +919,15 @@ try_again:
}
/* }}} */
+ZEND_API zend_string* ZEND_FASTCALL zval_get_string_func(zval *op) /* {{{ */
+{
+ return __zval_get_string_func(op, 0);
+}
+/* }}} */
+
ZEND_API zend_string* ZEND_FASTCALL zval_try_get_string_func(zval *op) /* {{{ */
{
- zend_string *str = zval_get_string_func(op);
- if (UNEXPECTED(EG(exception))) {
- return NULL;
- }
- return str;
+ return __zval_get_string_func(op, 1);
}
/* }}} */
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 349c390764..aad472f6f2 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -1631,8 +1631,8 @@ ZEND_VM_HELPER(zend_fetch_var_address_helper, CONST|TMPVAR|CV, UNUSED, int type)
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
ZVAL_UNDEFINED_OP1();
}
- name = zval_get_tmp_string(varname, &tmp_name);
- if (UNEXPECTED(EG(exception))) {
+ name = zval_try_get_tmp_string(varname, &tmp_name);
+ if (UNEXPECTED(!name)) {
FREE_OP1();
ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
@@ -5896,8 +5896,8 @@ ZEND_VM_HANDLER(74, ZEND_UNSET_VAR, CONST|TMPVAR|CV, UNUSED, VAR_FETCH)
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
varname = ZVAL_UNDEFINED_OP1();
}
- name = zval_get_tmp_string(varname, &tmp_name);
- if (UNEXPECTED(EG(exception))) {
+ name = zval_try_get_tmp_string(varname, &tmp_name);
+ if (UNEXPECTED(!name)) {
FREE_OP1();
HANDLE_EXCEPTION();
}
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 8ecfe7cb9f..003dde0aa1 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -8473,8 +8473,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_
if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
ZVAL_UNDEFINED_OP1();
}
- name = zval_get_tmp_string(varname, &tmp_name);
- if (UNEXPECTED(EG(exception))) {
+ name = zval_try_get_tmp_string(varname, &tmp_name);
+ if (UNEXPECTED(!name)) {
ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
@@ -8989,8 +8989,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HA
if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
varname = ZVAL_UNDEFINED_OP1();
}
- name = zval_get_tmp_string(varname, &tmp_name);
- if (UNEXPECTED(EG(exception))) {
+ name = zval_try_get_tmp_string(varname, &tmp_name);
+ if (UNEXPECTED(!name)) {
HANDLE_EXCEPTION();
}
@@ -15883,8 +15883,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_
if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
ZVAL_UNDEFINED_OP1();
}
- name = zval_get_tmp_string(varname, &tmp_name);
- if (UNEXPECTED(EG(exception))) {
+ name = zval_try_get_tmp_string(varname, &tmp_name);
+ if (UNEXPECTED(!name)) {
zval_ptr_dtor_nogc(free_op1);
ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
@@ -16008,8 +16008,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_H
if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
varname = ZVAL_UNDEFINED_OP1();
}
- name = zval_get_tmp_string(varname, &tmp_name);
- if (UNEXPECTED(EG(exception))) {
+ name = zval_try_get_tmp_string(varname, &tmp_name);
+ if (UNEXPECTED(!name)) {
zval_ptr_dtor_nogc(free_op1);
HANDLE_EXCEPTION();
}
@@ -47050,8 +47050,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
ZVAL_UNDEFINED_OP1();
}
- name = zval_get_tmp_string(varname, &tmp_name);
- if (UNEXPECTED(EG(exception))) {
+ name = zval_try_get_tmp_string(varname, &tmp_name);
+ if (UNEXPECTED(!name)) {
ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
@@ -47877,8 +47877,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDL
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
varname = ZVAL_UNDEFINED_OP1();
}
- name = zval_get_tmp_string(varname, &tmp_name);
- if (UNEXPECTED(EG(exception))) {
+ name = zval_try_get_tmp_string(varname, &tmp_name);
+ if (UNEXPECTED(!name)) {
HANDLE_EXCEPTION();
}
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index 3e8fb419d8..3ed320705d 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -2040,12 +2040,13 @@ static int date_interval_has_property(zval *object, zval *member, int type, void
int retval = 0;
if (UNEXPECTED(Z_TYPE_P(member) != IS_STRING)) {
- ZVAL_STR(&tmp_member, zval_get_string_func(member));
- member = &tmp_member;
- cache_slot = NULL;
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!str)) {
return 0;
}
+ ZVAL_STR(&tmp_member, str);
+ member = &tmp_member;
+ cache_slot = NULL;
}
obj = Z_PHPINTERVAL_P(object);
@@ -4167,12 +4168,13 @@ static zval *date_interval_read_property(zval *object, zval *member, int type, v
double fvalue = -1;
if (Z_TYPE_P(member) != IS_STRING) {
- ZVAL_STR(&tmp_member, zval_get_string_func(member));
- member = &tmp_member;
- cache_slot = NULL;
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!str)) {
return &EG(uninitialized_zval);
}
+ ZVAL_STR(&tmp_member, str);
+ member = &tmp_member;
+ cache_slot = NULL;
}
obj = Z_PHPINTERVAL_P(object);
@@ -4238,12 +4240,13 @@ static zval *date_interval_write_property(zval *object, zval *member, zval *valu
zval tmp_member;
if (Z_TYPE_P(member) != IS_STRING) {
- ZVAL_STR(&tmp_member, zval_get_string_func(member));
- member = &tmp_member;
- cache_slot = NULL;
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!str)) {
return value;
}
+ ZVAL_STR(&tmp_member, str);
+ member = &tmp_member;
+ cache_slot = NULL;
}
obj = Z_PHPINTERVAL_P(object);
@@ -4292,12 +4295,13 @@ static zval *date_interval_get_property_ptr_ptr(zval *object, zval *member, int
zval tmp_member, *ret;
if (Z_TYPE_P(member) != IS_STRING) {
- ZVAL_STR(&tmp_member, zval_get_string_func(member));
- member = &tmp_member;
- cache_slot = NULL;
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!str)) {
return NULL;
}
+ ZVAL_STR(&tmp_member, str);
+ member = &tmp_member;
+ cache_slot = NULL;
}
if(zend_binary_strcmp("y", sizeof("y") - 1, Z_STRVAL_P(member), Z_STRLEN_P(member)) == 0 ||
diff --git a/ext/dom/attr.c b/ext/dom/attr.c
index 0255708517..9326e145bf 100644
--- a/ext/dom/attr.c
+++ b/ext/dom/attr.c
@@ -160,8 +160,8 @@ int dom_attr_value_write(dom_object *obj, zval *newval)
return FAILURE;
}
- str = zval_get_string(newval);
- if (EG(exception)) {
+ str = zval_try_get_string(newval);
+ if (UNEXPECTED(!str)) {
return FAILURE;
}
diff --git a/ext/dom/characterdata.c b/ext/dom/characterdata.c
index 7676370677..b0ac50f44e 100644
--- a/ext/dom/characterdata.c
+++ b/ext/dom/characterdata.c
@@ -104,8 +104,8 @@ int dom_characterdata_data_write(dom_object *obj, zval *newval)
return FAILURE;
}
- str = zval_get_string(newval);
- if (EG(exception)) {
+ str = zval_try_get_string(newval);
+ if (UNEXPECTED(!str)) {
return FAILURE;
}
diff --git a/ext/dom/document.c b/ext/dom/document.c
index 235323e1d7..672fd624b3 100644
--- a/ext/dom/document.c
+++ b/ext/dom/document.c
@@ -337,8 +337,8 @@ int dom_document_encoding_write(dom_object *obj, zval *newval)
return FAILURE;
}
- str = zval_get_string(newval);
- if (EG(exception)) {
+ str = zval_try_get_string(newval);
+ if (UNEXPECTED(!str)) {
return FAILURE;
}
@@ -434,8 +434,8 @@ int dom_document_version_write(dom_object *obj, zval *newval)
return FAILURE;
}
- str = zval_get_string(newval);
- if (EG(exception)) {
+ str = zval_try_get_string(newval);
+ if (UNEXPECTED(!str)) {
return FAILURE;
}
@@ -665,8 +665,8 @@ int dom_document_document_uri_write(dom_object *obj, zval *newval)
return FAILURE;
}
- str = zval_get_string(newval);
- if (EG(exception)) {
+ str = zval_try_get_string(newval);
+ if (UNEXPECTED(!str)) {
return FAILURE;
}
diff --git a/ext/dom/node.c b/ext/dom/node.c
index 44e6f58b30..609d1a6116 100644
--- a/ext/dom/node.c
+++ b/ext/dom/node.c
@@ -330,8 +330,8 @@ int dom_node_node_value_write(dom_object *obj, zval *newval)
return FAILURE;
}
- str = zval_get_string(newval);
- if (EG(exception)) {
+ str = zval_try_get_string(newval);
+ if (UNEXPECTED(!str)) {
return FAILURE;
}
@@ -724,8 +724,8 @@ int dom_node_prefix_write(dom_object *obj, zval *newval)
nsnode = xmlDocGetRootElement(nodep->doc);
}
}
- str = zval_get_string(newval);
- if (EG(exception)) {
+ str = zval_try_get_string(newval);
+ if (UNEXPECTED(!str)) {
return FAILURE;
}
@@ -861,8 +861,8 @@ int dom_node_text_content_write(dom_object *obj, zval *newval)
return FAILURE;
}
- str = zval_get_string(newval);
- if (EG(exception)) {
+ str = zval_try_get_string(newval);
+ if (UNEXPECTED(!str)) {
return FAILURE;
}
diff --git a/ext/dom/processinginstruction.c b/ext/dom/processinginstruction.c
index 103bfd74f0..8cd2848c51 100644
--- a/ext/dom/processinginstruction.c
+++ b/ext/dom/processinginstruction.c
@@ -138,8 +138,8 @@ int dom_processinginstruction_data_write(dom_object *obj, zval *newval)
return FAILURE;
}
- str = zval_get_string(newval);
- if (EG(exception)) {
+ str = zval_try_get_string(newval);
+ if (UNEXPECTED(!str)) {
return FAILURE;
}
diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c
index 688e3a2552..f70dcbf613 100644
--- a/ext/iconv/iconv.c
+++ b/ext/iconv/iconv.c
@@ -2286,8 +2286,8 @@ PHP_FUNCTION(iconv_mime_encode)
if ((pzval = zend_hash_str_find_deref(Z_ARRVAL_P(pref), "line-break-chars", sizeof("line-break-chars") - 1)) != NULL) {
if (Z_TYPE_P(pzval) != IS_STRING) {
- tmp_str = zval_get_string_func(pzval);
- if (EG(exception)) {
+ tmp_str = zval_try_get_string_func(pzval);
+ if (UNEXPECTED(!tmp_str)) {
return;
}
lfchars = ZSTR_VAL(tmp_str);
diff --git a/ext/intl/transliterator/transliterator_class.c b/ext/intl/transliterator/transliterator_class.c
index a619ed4309..d5aac5df16 100644
--- a/ext/intl/transliterator/transliterator_class.c
+++ b/ext/intl/transliterator/transliterator_class.c
@@ -193,11 +193,12 @@ err:
zval tmp_member; \
if( Z_TYPE_P( member ) != IS_STRING ) \
{ \
- ZVAL_STR(&tmp_member, \
- zval_get_string_func(member)); \
+ zend_string *_str = \
+ zval_try_get_string_func(member); \
+ if (UNEXPECTED(!_str)) { return_fail; } \
+ ZVAL_STR(&tmp_member, _str); \
member = &tmp_member; \
cache_slot = NULL; \
- if (EG(exception)) { return_fail; } \
}
#define TRANSLITERATOR_PROPERTY_HANDLER_EPILOG \
diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c
index e3611562e5..bf71270452 100644
--- a/ext/mbstring/mbstring.c
+++ b/ext/mbstring/mbstring.c
@@ -826,8 +826,8 @@ php_mb_parse_encoding_array(zval *array, const mbfl_encoding ***return_list, siz
bauto = 0;
n = 0;
ZEND_HASH_FOREACH_VAL(target_hash, hash_entry) {
- zend_string *encoding_str = zval_get_string(hash_entry);
- if (EG(exception)) {
+ zend_string *encoding_str = zval_try_get_string(hash_entry);
+ if (UNEXPECTED(!encoding_str)) {
ret = FAILURE;
break;
}
@@ -3348,8 +3348,8 @@ PHP_FUNCTION(mb_convert_encoding)
_from_encodings = NULL;
ZEND_HASH_FOREACH_VAL(target_hash, hash_entry) {
- zend_string *encoding_str = zval_get_string(hash_entry);
- if (EG(exception)) {
+ zend_string *encoding_str = zval_try_get_string(hash_entry);
+ if (UNEXPECTED(!encoding_str)) {
if (_from_encodings) {
efree(_from_encodings);
}
diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c
index 9964ea0be4..1d56c1ab60 100644
--- a/ext/mysqli/mysqli.c
+++ b/ext/mysqli/mysqli.c
@@ -307,11 +307,12 @@ zval *mysqli_read_property(zval *object, zval *member, int type, void **cache_sl
obj = Z_MYSQLI_P(object);
if (Z_TYPE_P(member) != IS_STRING) {
- ZVAL_STR(&tmp_member, zval_get_string_func(member));
- member = &tmp_member;
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!str)) {
return &EG(uninitialized_zval);
}
+ ZVAL_STR(&tmp_member, str);
+ member = &tmp_member;
}
if (obj->prop_handler != NULL) {
@@ -343,11 +344,12 @@ zval *mysqli_write_property(zval *object, zval *member, zval *value, void **cach
mysqli_prop_handler *hnd = NULL;
if (Z_TYPE_P(member) != IS_STRING) {
- ZVAL_STR(&tmp_member, zval_get_string_func(member));
- member = &tmp_member;
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!str)) {
return value;
}
+ ZVAL_STR(&tmp_member, str);
+ member = &tmp_member;
}
obj = Z_MYSQLI_P(object);
diff --git a/ext/oci8/oci8_statement.c b/ext/oci8/oci8_statement.c
index 91f6223373..fa6e97e47f 100644
--- a/ext/oci8/oci8_statement.c
+++ b/ext/oci8/oci8_statement.c
@@ -1930,8 +1930,8 @@ php_oci_bind *php_oci_bind_array_helper_date(zval *var, zend_long max_table_leng
bind->array.element_lengths[i] = sizeof(OCIDate);
}
if ((i < bind->array.current_length) && (entry = zend_hash_get_current_data(hash)) != NULL) {
- zend_string *entry_str = zval_get_string(entry);
- if (EG(exception)) {
+ zend_string *entry_str = zval_try_get_string(entry);
+ if (UNEXPECTED(!entry_str)) {
efree(bind->array.element_lengths);
efree(bind->array.elements);
efree(bind);
diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c
index 7f287c8823..7d40c85882 100644
--- a/ext/openssl/openssl.c
+++ b/ext/openssl/openssl.c
@@ -2673,8 +2673,8 @@ static X509_STORE *php_openssl_setup_verify(zval *calist)
if (calist && (Z_TYPE_P(calist) == IS_ARRAY)) {
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(calist), item) {
- zend_string *str = zval_get_string(item);
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string(item);
+ if (UNEXPECTED(!str)) {
return NULL;
}
@@ -3154,8 +3154,8 @@ static int php_openssl_make_REQ(struct php_x509_request * req, X509_REQ * csr, z
if (strindex) {
int nid = OBJ_txt2nid(ZSTR_VAL(strindex));
if (nid != NID_undef) {
- zend_string *str_item = zval_get_string(item);
- if (EG(exception)) {
+ zend_string *str_item = zval_try_get_string(item);
+ if (UNEXPECTED(!str_item)) {
return FAILURE;
}
if (!X509_NAME_add_entry_by_NID(subj, nid, MBSTRING_UTF8,
@@ -3237,8 +3237,8 @@ static int php_openssl_make_REQ(struct php_x509_request * req, X509_REQ * csr, z
nid = OBJ_txt2nid(ZSTR_VAL(strindex));
if (nid != NID_undef) {
- zend_string *str_item = zval_get_string(item);
- if (EG(exception)) {
+ zend_string *str_item = zval_try_get_string(item);
+ if (UNEXPECTED(!str_item)) {
return FAILURE;
}
if (!X509_NAME_add_entry_by_NID(subj, nid, MBSTRING_UTF8, (unsigned char*)ZSTR_VAL(str_item), -1, -1, 0)) {
@@ -5369,8 +5369,8 @@ PHP_FUNCTION(openssl_pkcs7_encrypt)
/* tack on extra headers */
if (zheaders) {
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(zheaders), strindex, zcertval) {
- zend_string *str = zval_get_string(zcertval);
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string(zcertval);
+ if (UNEXPECTED(!str)) {
goto clean_exit;
}
if (strindex) {
@@ -5587,8 +5587,8 @@ PHP_FUNCTION(openssl_pkcs7_sign)
int ret;
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(zheaders), strindex, hval) {
- zend_string *str = zval_get_string(hval);
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string(hval);
+ if (UNEXPECTED(!str)) {
goto clean_exit;
}
if (strindex) {
diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c
index ad08e1f13a..09d1bcbf3e 100644
--- a/ext/openssl/xp_ssl.c
+++ b/ext/openssl/xp_ssl.c
@@ -1484,8 +1484,8 @@ static int php_openssl_enable_server_sni(php_stream *stream, php_openssl_netstre
return FAILURE;
}
- local_cert_str = zval_get_string(local_cert);
- if (EG(exception)) {
+ local_cert_str = zval_try_get_string(local_cert);
+ if (UNEXPECTED(!local_cert_str)) {
return FAILURE;
}
if (!VCWD_REALPATH(ZSTR_VAL(local_cert_str), resolved_cert_path_buff)) {
@@ -1506,8 +1506,8 @@ static int php_openssl_enable_server_sni(php_stream *stream, php_openssl_netstre
return FAILURE;
}
- local_pk_str = zval_get_string(local_pk);
- if (EG(exception)) {
+ local_pk_str = zval_try_get_string(local_pk);
+ if (UNEXPECTED(!local_pk_str)) {
return FAILURE;
}
if (!VCWD_REALPATH(ZSTR_VAL(local_pk_str), resolved_pk_path_buff)) {
diff --git a/ext/pdo_firebird/firebird_driver.c b/ext/pdo_firebird/firebird_driver.c
index a4ff7e5c5a..53ffbdc7c6 100644
--- a/ext/pdo_firebird/firebird_driver.c
+++ b/ext/pdo_firebird/firebird_driver.c
@@ -465,8 +465,8 @@ static int firebird_handle_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *v
case PDO_FB_ATTR_DATE_FORMAT:
{
- zend_string *str = zval_get_string(val);
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string(val);
+ if (UNEXPECTED(!str)) {
return 0;
}
if (H->date_format) {
@@ -479,8 +479,8 @@ static int firebird_handle_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *v
case PDO_FB_ATTR_TIME_FORMAT:
{
- zend_string *str = zval_get_string(val);
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string(val);
+ if (UNEXPECTED(!str)) {
return 0;
}
if (H->time_format) {
@@ -493,8 +493,8 @@ static int firebird_handle_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *v
case PDO_FB_ATTR_TIMESTAMP_FORMAT:
{
- zend_string *str = zval_get_string(val);
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string(val);
+ if (UNEXPECTED(!str)) {
return 0;
}
if (H->timestamp_format) {
diff --git a/ext/pdo_oci/oci_driver.c b/ext/pdo_oci/oci_driver.c
index f121b4791b..eb1f70bdb0 100644
--- a/ext/pdo_oci/oci_driver.c
+++ b/ext/pdo_oci/oci_driver.c
@@ -460,8 +460,8 @@ static int oci_handle_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val) /
case PDO_OCI_ATTR_ACTION:
{
#if (OCI_MAJOR_VERSION >= 10)
- zend_string *action = zval_get_string(val);
- if (EG(exception)) {
+ zend_string *action = zval_try_get_string(val);
+ if (UNEXPECTED(!action)) {
return 0;
}
@@ -481,8 +481,8 @@ static int oci_handle_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val) /
case PDO_OCI_ATTR_CLIENT_INFO:
{
#if (OCI_MAJOR_VERSION >= 10)
- zend_string *client_info = zval_get_string(val);
- if (EG(exception)) {
+ zend_string *client_info = zval_try_get_string(val);
+ if (UNEXPECTED(!client_info)) {
return 0;
}
@@ -502,8 +502,8 @@ static int oci_handle_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val) /
case PDO_OCI_ATTR_CLIENT_IDENTIFIER:
{
#if (OCI_MAJOR_VERSION >= 10)
- zend_string *identifier = zval_get_string(val);
- if (EG(exception)) {
+ zend_string *identifier = zval_try_get_string(val);
+ if (UNEXPECTED(!identifier)) {
return 0;
}
@@ -523,8 +523,8 @@ static int oci_handle_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val) /
case PDO_OCI_ATTR_MODULE:
{
#if (OCI_MAJOR_VERSION >= 10)
- zend_string *module = zval_get_string(val);
- if (EG(exception)) {
+ zend_string *module = zval_try_get_string(val);
+ if (UNEXPECTED(!module)) {
return 0;
}
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c
index 9dd08f249a..967eb05155 100644
--- a/ext/pgsql/pgsql.c
+++ b/ext/pgsql/pgsql.c
@@ -4284,8 +4284,8 @@ PHP_FUNCTION(pg_copy_from)
PQclear(pgsql_result);
#if HAVE_PQPUTCOPYDATA
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pg_rows), value) {
- zend_string *tmp = zval_get_string(value);
- if (EG(exception)) {
+ zend_string *tmp = zval_try_get_string(value);
+ if (UNEXPECTED(!tmp)) {
return;
}
query = (char *)emalloc(ZSTR_LEN(tmp) + 2);
@@ -4309,8 +4309,8 @@ PHP_FUNCTION(pg_copy_from)
}
#else
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pg_rows), value) {
- zend_string *tmp = zval_get_string(value);
- if (EG(exception)) {
+ zend_string *tmp = zval_try_get_string(value);
+ if (UNEXPECTED(!tmp)) {
return;
}
query = (char *)emalloc(ZSTR_LEN(tmp) + 2);
@@ -5173,8 +5173,8 @@ PHP_FUNCTION(pg_send_execute)
if (Z_TYPE_P(tmp) == IS_NULL) {
params[i] = NULL;
} else {
- zend_string *tmp_str = zval_get_string(tmp);
- if (EG(exception)) {
+ zend_string *tmp_str = zval_try_get_string(tmp);
+ if (UNEXPECTED(!tmp)) {
_php_pgsql_free_params(params, num_params);
return;
}
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index ab51925180..ecdec41e03 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -2275,8 +2275,8 @@ ZEND_METHOD(reflection_parameter, __construct)
if (Z_TYPE_P(classref) == IS_OBJECT) {
ce = Z_OBJCE_P(classref);
} else {
- name = zval_get_string(classref);
- if (EG(exception)) {
+ name = zval_try_get_string(classref);
+ if (UNEXPECTED(!name)) {
return;
}
if ((ce = zend_lookup_class(name)) == NULL) {
@@ -2288,8 +2288,8 @@ ZEND_METHOD(reflection_parameter, __construct)
zend_string_release(name);
}
- name = zval_get_string(method);
- if (EG(exception)) {
+ name = zval_try_get_string(method);
+ if (UNEXPECTED(!name)) {
return;
}
diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c
index 01c119888e..06c504884c 100644
--- a/ext/simplexml/simplexml.c
+++ b/ext/simplexml/simplexml.c
@@ -258,11 +258,12 @@ long_dim:
name = NULL;
} else {
if (Z_TYPE_P(member) != IS_STRING) {
- ZVAL_STR(&tmp_zv, zval_get_string_func(member));
- member = &tmp_zv;
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!str)) {
return &EG(uninitialized_zval);
}
+ ZVAL_STR(&tmp_zv, str);
+ member = &tmp_zv;
}
name = Z_STRVAL_P(member);
}
@@ -457,8 +458,8 @@ long_dim:
}
} else {
if (Z_TYPE_P(member) != IS_STRING) {
- trim_str = zval_get_string_func(member);
- if (EG(exception)) {
+ trim_str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!trim_str)) {
return &EG(error_zval);
}
@@ -720,11 +721,12 @@ static int sxe_prop_dim_exists(zval *object, zval *member, int check_empty, zend
zval tmp_zv;
if (Z_TYPE_P(member) != IS_STRING && Z_TYPE_P(member) != IS_LONG) {
- ZVAL_STR(&tmp_zv, zval_get_string_func(member));
- member = &tmp_zv;
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!str)) {
return 0;
}
+ ZVAL_STR(&tmp_zv, str);
+ member = &tmp_zv;
}
sxe = Z_SXEOBJ_P(object);
@@ -842,11 +844,12 @@ static void sxe_prop_dim_delete(zval *object, zval *member, zend_bool elements,
int test = 0;
if (Z_TYPE_P(member) != IS_STRING && Z_TYPE_P(member) != IS_LONG) {
- ZVAL_STR(&tmp_zv, zval_get_string_func(member));
- member = &tmp_zv;
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!str)) {
return;
}
+ ZVAL_STR(&tmp_zv, str);
+ member = &tmp_zv;
}
sxe = Z_SXEOBJ_P(object);
diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c
index 69ff9b00f4..1c781304c5 100644
--- a/ext/snmp/snmp.c
+++ b/ext/snmp/snmp.c
@@ -1918,11 +1918,12 @@ zval *php_snmp_read_property(zval *object, zval *member, int type, void **cache_
obj = Z_SNMP_P(object);
if (Z_TYPE_P(member) != IS_STRING) {
- ZVAL_STR(&tmp_member, zval_get_string_func(member));
- member = &tmp_member;
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!str)) {
return &EG(uninitialized_zval);
}
+ ZVAL_STR(&tmp_member, str);
+ member = &tmp_member;
}
hnd = zend_hash_find_ptr(&php_snmp_properties, Z_STR_P(member));
@@ -1955,11 +1956,12 @@ zval *php_snmp_write_property(zval *object, zval *member, zval *value, void **ca
php_snmp_prop_handler *hnd;
if (Z_TYPE_P(member) != IS_STRING) {
- ZVAL_STR(&tmp_member, zval_get_string_func(member));
- member = &tmp_member;
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!str)) {
return value;
}
+ ZVAL_STR(&tmp_member, str);
+ member = &tmp_member;
}
obj = Z_SNMP_P(object);
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c
index defb9fdb88..8c3c2b454e 100644
--- a/ext/spl/spl_iterators.c
+++ b/ext/spl/spl_iterators.c
@@ -2063,8 +2063,8 @@ SPL_METHOD(RegexIterator, accept)
case REGIT_MODE_REPLACE: {
zval *replacement = zend_read_property(intern->std.ce, ZEND_THIS, "replacement", sizeof("replacement")-1, 1, &rv);
- zend_string *replacement_str = zval_get_string(replacement);
- if (EG(exception)) {
+ zend_string *replacement_str = zval_try_get_string(replacement);
+ if (UNEXPECTED(!replacement_str)) {
return;
}
diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c
index c3ffeabc00..81ce1a0f00 100644
--- a/ext/sqlite3/sqlite3.c
+++ b/ext/sqlite3/sqlite3.c
@@ -802,8 +802,8 @@ static int sqlite3_do_callback(struct php_sqlite3_fci *fc, zval *cb, int argc, s
break;
default: {
- zend_string *str = zval_get_string(&retval);
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string(&retval);
+ if (UNEXPECTED(!str)) {
ret = FAILURE;
break;
}
@@ -1487,8 +1487,8 @@ static int php_sqlite3_bind_params(php_sqlite3_stmt *stmt_obj) /* {{{ */
}
case SQLITE3_TEXT: {
- zend_string *str = zval_get_string(parameter);
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string(parameter);
+ if (UNEXPECTED(!str)) {
return FAILURE;
}
return_code = sqlite3_bind_text(stmt_obj->stmt, param->param_number, ZSTR_VAL(str), ZSTR_LEN(str), SQLITE_TRANSIENT);
diff --git a/ext/standard/assert.c b/ext/standard/assert.c
index 6e21af6dd5..9f315d0581 100644
--- a/ext/standard/assert.c
+++ b/ext/standard/assert.c
@@ -299,8 +299,8 @@ PHP_FUNCTION(assert_options)
case ASSERT_ACTIVE:
oldint = ASSERTG(active);
if (ac == 2) {
- zend_string *value_str = zval_get_string(value);
- if (EG(exception)) {
+ zend_string *value_str = zval_try_get_string(value);
+ if (UNEXPECTED(!value_str)) {
return;
}
@@ -315,8 +315,8 @@ PHP_FUNCTION(assert_options)
case ASSERT_BAIL:
oldint = ASSERTG(bail);
if (ac == 2) {
- zend_string *value_str = zval_get_string(value);
- if (EG(exception)) {
+ zend_string *value_str = zval_try_get_string(value);
+ if (UNEXPECTED(!value_str)) {
return;
}
@@ -331,8 +331,8 @@ PHP_FUNCTION(assert_options)
case ASSERT_QUIET_EVAL:
oldint = ASSERTG(quiet_eval);
if (ac == 2) {
- zend_string *value_str = zval_get_string(value);
- if (EG(exception)) {
+ zend_string *value_str = zval_try_get_string(value);
+ if (UNEXPECTED(!value_str)) {
return;
}
@@ -347,8 +347,8 @@ PHP_FUNCTION(assert_options)
case ASSERT_WARNING:
oldint = ASSERTG(warning);
if (ac == 2) {
- zend_string *value_str = zval_get_string(value);
- if (EG(exception)) {
+ zend_string *value_str = zval_try_get_string(value);
+ if (UNEXPECTED(!value_str)) {
return;
}
@@ -377,8 +377,8 @@ PHP_FUNCTION(assert_options)
case ASSERT_EXCEPTION:
oldint = ASSERTG(exception);
if (ac == 2) {
- zend_string *val = zval_get_string(value);
- if (EG(exception)) {
+ zend_string *val = zval_try_get_string(value);
+ if (UNEXPECTED(!val)) {
return;
}
diff --git a/ext/standard/password.c b/ext/standard/password.c
index 52ff1518e6..d91058bfc2 100644
--- a/ext/standard/password.c
+++ b/ext/standard/password.c
@@ -139,8 +139,8 @@ static zend_string* php_password_get_salt(zval *unused_, size_t required_salt_le
case IS_LONG:
case IS_DOUBLE:
case IS_OBJECT:
- buffer = zval_get_string(option_buffer);
- if (EG(exception)) {
+ buffer = zval_try_get_string(option_buffer);
+ if (UNEXPECTED(!buffer)) {
return NULL;
}
break;
diff --git a/ext/standard/string.c b/ext/standard/string.c
index a7aa02fcbd..3e06085a5f 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -4849,8 +4849,8 @@ PHP_FUNCTION(setlocale)
plocale = &args[i];
}
- loc = zval_get_string(plocale);
- if (EG(exception)) {
+ loc = zval_try_get_string(plocale);
+ if (UNEXPECTED(!loc)) {
return;
}
diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c
index b3b202af39..20960d96d5 100644
--- a/ext/xmlreader/php_xmlreader.c
+++ b/ext/xmlreader/php_xmlreader.c
@@ -122,11 +122,12 @@ zval *xmlreader_get_property_ptr_ptr(zval *object, zval *member, int type, void
xmlreader_prop_handler *hnd = NULL;
if (Z_TYPE_P(member) != IS_STRING) {
- ZVAL_STR(&tmp_member, zval_get_string_func(member));
- member = &tmp_member;
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!str)) {
return NULL;
}
+ ZVAL_STR(&tmp_member, str);
+ member = &tmp_member;
}
obj = Z_XMLREADER_P(object);
@@ -156,11 +157,12 @@ zval *xmlreader_read_property(zval *object, zval *member, int type, void **cache
xmlreader_prop_handler *hnd = NULL;
if (Z_TYPE_P(member) != IS_STRING) {
- ZVAL_STR(&tmp_member, zval_get_string_func(member));
- member = &tmp_member;
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!str)) {
return &EG(uninitialized_zval);
}
+ ZVAL_STR(&tmp_member, str);
+ member = &tmp_member;
}
obj = Z_XMLREADER_P(object);
@@ -194,11 +196,12 @@ zval *xmlreader_write_property(zval *object, zval *member, zval *value, void **c
xmlreader_prop_handler *hnd = NULL;
if (Z_TYPE_P(member) != IS_STRING) {
- ZVAL_STR(&tmp_member, zval_get_string_func(member));
- member = &tmp_member;
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!str)) {
return value;
}
+ ZVAL_STR(&tmp_member, str);
+ member = &tmp_member;
}
obj = Z_XMLREADER_P(object);
diff --git a/ext/xsl/xsltprocessor.c b/ext/xsl/xsltprocessor.c
index 919006041a..20d907dc4a 100644
--- a/ext/xsl/xsltprocessor.c
+++ b/ext/xsl/xsltprocessor.c
@@ -757,14 +757,17 @@ PHP_FUNCTION(xsl_xsltprocessor_set_parameter)
intern = Z_XSL_P(id);
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(array_value), string_key, entry) {
zval tmp;
+ zend_string *str;
+
if (string_key == NULL) {
php_error_docref(NULL, E_WARNING, "Invalid parameter array");
RETURN_FALSE;
}
- ZVAL_STR(&tmp, zval_get_string(entry));
- if (EG(exception)) {
+ str = zval_try_get_string(entry);
+ if (UNEXPECTED(!str)) {
return;
}
+ ZVAL_STR(&tmp, str);
zend_hash_update(intern->parameter, string_key, &tmp);
} ZEND_HASH_FOREACH_END();
RETURN_TRUE;
@@ -847,8 +850,8 @@ PHP_FUNCTION(xsl_xsltprocessor_register_php_functions)
intern = Z_XSL_P(id);
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(array_value), entry) {
- zend_string *str = zval_get_string(entry);
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string(entry);
+ if (UNEXPECTED(!str)) {
return;
}
ZVAL_LONG(&new_string, 1);
diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c
index c2b41309c0..b8e01c1fe2 100644
--- a/ext/zip/php_zip.c
+++ b/ext/zip/php_zip.c
@@ -873,12 +873,13 @@ static zval *php_zip_get_property_ptr_ptr(zval *object, zval *member, int type,
zip_prop_handler *hnd = NULL;
if (Z_TYPE_P(member) != IS_STRING) {
- ZVAL_STR(&tmp_member, zval_get_string_func(member));
- member = &tmp_member;
- cache_slot = NULL;
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!str)) {
return NULL;
}
+ ZVAL_STR(&tmp_member, str);
+ member = &tmp_member;
+ cache_slot = NULL;
}
obj = Z_ZIP_P(object);
@@ -907,12 +908,13 @@ static zval *php_zip_read_property(zval *object, zval *member, int type, void **
zip_prop_handler *hnd = NULL;
if (Z_TYPE_P(member) != IS_STRING) {
- ZVAL_STR(&tmp_member, zval_get_string_func(member));
- member = &tmp_member;
- cache_slot = NULL;
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!str)) {
return &EG(uninitialized_zval);
}
+ ZVAL_STR(&tmp_member, str);
+ member = &tmp_member;
+ cache_slot = NULL;
}
obj = Z_ZIP_P(object);
@@ -946,12 +948,13 @@ static int php_zip_has_property(zval *object, zval *member, int type, void **cac
int retval = 0;
if (Z_TYPE_P(member) != IS_STRING) {
- ZVAL_STR(&tmp_member, zval_get_string_func(member));
- member = &tmp_member;
- cache_slot = NULL;
- if (EG(exception)) {
+ zend_string *str = zval_try_get_string_func(member);
+ if (UNEXPECTED(!str)) {
return 0;
}
+ ZVAL_STR(&tmp_member, str);
+ member = &tmp_member;
+ cache_slot = NULL;
}
obj = Z_ZIP_P(object);