Skip to content

Instantly share code, notes, and snippets.

@cmb69
Created July 4, 2018 12:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cmb69/3060a552fc825497d066262ab31f3998 to your computer and use it in GitHub Desktop.
Save cmb69/3060a552fc825497d066262ab31f3998 to your computer and use it in GitHub Desktop.
Preliminary fix uopz for PHP 7.3
From f0ffe9876d90982a4fefed21fec4b3be2022087d Mon Sep 17 00:00:00 2001
From: "Christoph M. Becker" <cmbecker69@gmx.de>
Date: Wed, 4 Jul 2018 14:24:40 +0200
Subject: [PATCH] Update for PHP 7.3
---
src/function.c | 2 +-
src/handlers.c | 44 ++++++++++++++++++++++----------------------
2 files changed, 23 insertions(+), 23 deletions(-)
diff --git a/src/function.c b/src/function.c
index fee78d8..c515144 100644
--- a/src/function.c
+++ b/src/function.c
@@ -277,7 +277,7 @@ void uopz_get_static(zend_class_entry *clazz, zend_string *function, zval *retur
}
ZVAL_ARR(return_value, entry->op_array.static_variables);
- GC_REFCOUNT(entry->op_array.static_variables)++;
+ GC_ADDREF(entry->op_array.static_variables);
} /* }}} */
#endif /* UOPZ_FUNCTION */
diff --git a/src/handlers.c b/src/handlers.c
index 7cd86a7..645e064 100644
--- a/src/handlers.c
+++ b/src/handlers.c
@@ -128,7 +128,7 @@ int uopz_no_exit_handler(UOPZ_OPCODE_HANDLER_ARGS) { /* {{{ */
zval *estatus;
if (EX(opline)->op1_type == IS_CONST) {
- estatus = EX_CONSTANT(EX(opline)->op1);
+ estatus = RT_CONSTANT(EX(opline), EX(opline)->op1);
} else estatus = EX_VAR(EX(opline)->op1.var);
if (Z_ISREF_P(estatus)) {
@@ -160,13 +160,13 @@ int uopz_call_handler(UOPZ_OPCODE_HANDLER_ARGS) { /* {{{ */
case ZEND_INIT_FCALL_BY_NAME:
case ZEND_INIT_FCALL:
case ZEND_INIT_NS_FCALL_BY_NAME: {
- zval *function_name = EX_CONSTANT(EX(opline)->op2);
+ zval *function_name = RT_CONSTANT(EX(opline), EX(opline)->op2);
CACHE_PTR(Z_CACHE_SLOT_P(function_name), NULL);
} break;
case ZEND_INIT_METHOD_CALL: {
if (EX(opline)->op2_type == IS_CONST) {
- zval *function_name = EX_CONSTANT(EX(opline)->op2);
+ zval *function_name = RT_CONSTANT(EX(opline), EX(opline)->op2);
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), NULL, NULL);
}
} break;
@@ -177,7 +177,7 @@ int uopz_call_handler(UOPZ_OPCODE_HANDLER_ARGS) { /* {{{ */
zend_string *key = NULL;
if (EX(opline)->op1_type == IS_CONST) {
- key = zend_string_tolower(Z_STR_P(EX_CONSTANT(EX(opline)->op1)));
+ key = zend_string_tolower(Z_STR_P(RT_CONSTANT(EX(opline), EX(opline)->op1)));
} else if (EX(opline)->op1_type != IS_UNUSED) {
ce = Z_CE_P(EX_VAR(EX(opline)->op1.var));
if (!ce) {
@@ -197,14 +197,14 @@ int uopz_call_handler(UOPZ_OPCODE_HANDLER_ARGS) { /* {{{ */
} else poser = Z_OBJCE_P(mock);
if (EX(opline)->op1_type == IS_CONST) {
- CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(EX(opline)->op1)), poser);
+ CACHE_PTR(Z_CACHE_SLOT_P(RT_CONSTANT(EX(opline), EX(opline)->op1)), poser);
} else {
Z_CE_P(EX_VAR(EX(opline)->op1.var)) = poser;
}
}
if (key && EX(opline)->op2_type == IS_CONST) {
- zval *function_name = EX_CONSTANT(EX(opline)->op2);
+ zval *function_name = RT_CONSTANT(EX(opline), EX(opline)->op2);
if (EX(opline)->op1_type == IS_CONST) {
CACHE_PTR(Z_CACHE_SLOT_P(function_name), NULL);
} else {
@@ -241,13 +241,13 @@ int uopz_call_handler(UOPZ_OPCODE_HANDLER_ARGS) { /* {{{ */
int uopz_constant_handler(UOPZ_OPCODE_HANDLER_ARGS) { /* {{{ */
#if PHP_VERSION_ID >= 70100
- if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(EX(opline)->op2)))) {
- CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(EX(opline)->op2)), NULL);
+ if (CACHED_PTR(Z_CACHE_SLOT_P(RT_CONSTANT(EX(opline), EX(opline)->op2)))) {
+ CACHE_PTR(Z_CACHE_SLOT_P(RT_CONSTANT(EX(opline), EX(opline)->op2)), NULL);
}
#else
if (EX(opline)->op1_type == IS_UNUSED) {
- if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(EX(opline)->op2)))) {
- CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(EX(opline)->op2)), NULL);
+ if (CACHED_PTR(Z_CACHE_SLOT_P(RT_CONSTANT(EX(opline), EX(opline)->op2)))) {
+ CACHE_PTR(Z_CACHE_SLOT_P(RT_CONSTANT(EX(opline), EX(opline)->op2)), NULL);
}
} else {
zend_string *key = NULL;
@@ -255,17 +255,17 @@ int uopz_constant_handler(UOPZ_OPCODE_HANDLER_ARGS) { /* {{{ */
zend_class_entry *poser = NULL;
if (EX(opline)->op1_type == IS_CONST) {
- key = zend_string_tolower(Z_STR_P(EX_CONSTANT(EX(opline)->op1)));
+ key = zend_string_tolower(Z_STR_P(RT_CONSTANT(EX(opline), EX(opline)->op1)));
if ((mock = zend_hash_find(&UOPZ(mocks), key))) {
if (Z_TYPE_P(mock) == IS_OBJECT) {
poser = Z_OBJCE_P(mock);
} else poser = zend_lookup_class(Z_STR_P(mock));
- CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(EX(opline)->op1)), poser);
+ CACHE_PTR(Z_CACHE_SLOT_P(RT_CONSTANT(EX(opline), EX(opline)->op1)), poser);
}
- if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(EX(opline)->op2)))) {
- CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(EX(opline)->op2)), NULL);
+ if (CACHED_PTR(Z_CACHE_SLOT_P(RT_CONSTANT(EX(opline), EX(opline)->op2)))) {
+ CACHE_PTR(Z_CACHE_SLOT_P(RT_CONSTANT(EX(opline), EX(opline)->op2)), NULL);
}
zend_string_release(key);
@@ -280,7 +280,7 @@ int uopz_constant_handler(UOPZ_OPCODE_HANDLER_ARGS) { /* {{{ */
Z_CE_P(EX_VAR(EX(opline)->op1.var)) = poser;
}
- CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(EX(opline)->op2)),
+ CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(RT_CONSTANT(EX(opline), EX(opline)->op2)),
Z_CE_P(EX_VAR(EX(opline)->op1.var)), NULL);
zend_string_release(key);
@@ -302,10 +302,10 @@ int uopz_mock_handler(UOPZ_OPCODE_HANDLER_ARGS) { /* {{{ */
zend_class_entry *ce;
if (EX(opline)->op1_type == IS_CONST) {
- ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(EX(opline)->op1)));
+ ce = CACHED_PTR(Z_CACHE_SLOT_P(RT_CONSTANT(EX(opline), EX(opline)->op1)));
if (UNEXPECTED(ce == NULL)) {
- key = Z_STR_P(EX_CONSTANT(EX(opline)->op1));
+ key = Z_STR_P(RT_CONSTANT(EX(opline), EX(opline)->op1));
} else {
key = ce->name;
}
@@ -344,7 +344,7 @@ int uopz_mock_handler(UOPZ_OPCODE_HANDLER_ARGS) { /* {{{ */
ce = zend_lookup_class(Z_STR_P(mock));
if (EXPECTED(ce)) {
if (EX(opline)->op1_type == IS_CONST) {
- CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(EX(opline)->op1)), ce);
+ CACHE_PTR(Z_CACHE_SLOT_P(RT_CONSTANT(EX(opline), EX(opline)->op1)), ce);
} else if (EX(opline)->op1_type != IS_UNUSED) {
Z_CE_P(EX_VAR(EX(opline)->op1.var)) = ce;
} else {
@@ -433,7 +433,7 @@ _uopz_return_handler_dispatch:
#ifdef ZEND_FETCH_CLASS_CONSTANT
int uopz_class_constant_handler(UOPZ_OPCODE_HANDLER_ARGS) { /* {{{ */
if (EX(opline)->op1_type == IS_CONST) {
- zval *name = EX_CONSTANT(EX(opline)->op1);
+ zval *name = RT_CONSTANT(EX(opline), EX(opline)->op1);
zend_string *key = Z_STR_P(name);
zval *mock = NULL;
zend_class_entry *poser = NULL;
@@ -453,7 +453,7 @@ int uopz_class_constant_handler(UOPZ_OPCODE_HANDLER_ARGS) { /* {{{ */
zend_string_release(key);
}
- CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(EX(opline)->op2)), NULL);
+ CACHE_PTR(Z_CACHE_SLOT_P(RT_CONSTANT(EX(opline), EX(opline)->op2)), NULL);
if (uopz_fetch_class_constant_handler) {
return uopz_fetch_class_constant_handler(UOPZ_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -475,7 +475,7 @@ int uopz_fetch_handler(UOPZ_OPCODE_HANDLER_ARGS) { /* {{{ */
if (EX(opline)->op2_type == IS_CONST) {
name =
- EX_CONSTANT(EX(opline)->op2);
+ RT_CONSTANT(EX(opline), EX(opline)->op2);
if (name) {
key = Z_STR_P(name);
}
@@ -528,7 +528,7 @@ int uopz_fetch_handler(UOPZ_OPCODE_HANDLER_ARGS) { /* {{{ */
} /* }}} */
int uopz_add_class_handler(UOPZ_OPCODE_HANDLER_ARGS) { /* {{{ */
- zval *name = EX_CONSTANT(EX(opline)->op2);
+ zval *name = RT_CONSTANT(EX(opline), EX(opline)->op2);
zend_string *key = zend_string_tolower(Z_STR_P(name));
zval *mock = NULL;
--
2.17.0.windows.1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment