From 5ce15a55bd0c441d33f7fd377e178b84591855e7 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 21 Feb 2023 11:00:50 +0100 Subject: [PATCH 1/8] .cirrus.yml: wrap long line --- .cirrus.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.cirrus.yml b/.cirrus.yml index a7676803d1fe..c58980c97feb 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -147,7 +147,8 @@ asan_task: `#--with-pdo-firebird` `#--with-pdo-dblib` --enable-werror - CFLAGS='-fsanitize=undefined,address -DZEND_TRACK_ARENA_ALLOC' LDFLAGS='-fsanitize=undefined,address' + CFLAGS='-fsanitize=undefined,address -DZEND_TRACK_ARENA_ALLOC' + LDFLAGS='-fsanitize=undefined,address' CC=clang CXX=clang++ - make -j2 From 2540210243b77f20604c1e51a0c1f4625d2dae18 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 21 Feb 2023 11:02:05 +0100 Subject: [PATCH 2/8] .cirrus.yml: add -Wassign-enum To find mistakes with enums. See https://github.com/php/php-src/pull/10617#pullrequestreview-1305655803 --- .cirrus.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.cirrus.yml b/.cirrus.yml index c58980c97feb..32ea3b7c8c9a 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -147,7 +147,7 @@ asan_task: `#--with-pdo-firebird` `#--with-pdo-dblib` --enable-werror - CFLAGS='-fsanitize=undefined,address -DZEND_TRACK_ARENA_ALLOC' + CFLAGS='-fsanitize=undefined,address -DZEND_TRACK_ARENA_ALLOC -Wassign-enum' LDFLAGS='-fsanitize=undefined,address' CC=clang CXX=clang++ From 271081df0cb2bb8d2e914eb1b16fd55b1bba20a5 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 22 Feb 2023 10:39:23 +0100 Subject: [PATCH 3/8] ext/ffi: add casts to work around -Wassign-enum --- ext/ffi/ffi.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/ext/ffi/ffi.c b/ext/ffi/ffi.c index 0c236f2b71da..cf58810bdd0f 100644 --- a/ext/ffi/ffi.c +++ b/ext/ffi/ffi.c @@ -261,7 +261,7 @@ static zend_object *zend_ffi_cdata_new(zend_class_entry *class_type) /* {{{ */ cdata->type = NULL; cdata->ptr = NULL; - cdata->flags = 0; + cdata->flags = (zend_ffi_flags)0; return &cdata->std; } @@ -1110,7 +1110,7 @@ static zval *zend_ffi_cdata_get(zend_object *obj, zend_string *member, int read_ return &EG(uninitialized_zval); } - zend_ffi_cdata_to_zval(cdata, cdata->ptr, type, BP_VAR_R, rv, 0, 0, 0); + zend_ffi_cdata_to_zval(cdata, cdata->ptr, type, BP_VAR_R, rv, (zend_ffi_flags)0, 0, 0); return rv; } /* }}} */ @@ -2833,7 +2833,7 @@ static ZEND_FUNCTION(ffi_trampoline) /* {{{ */ } if (ZEND_FFI_TYPE(type->func.ret_type)->kind != ZEND_FFI_TYPE_VOID) { - zend_ffi_cdata_to_zval(NULL, ret, ZEND_FFI_TYPE(type->func.ret_type), BP_VAR_R, return_value, 0, 1, 0); + zend_ffi_cdata_to_zval(NULL, ret, ZEND_FFI_TYPE(type->func.ret_type), BP_VAR_R, return_value, (zend_ffi_flags)0, 1, 0); } else { ZVAL_NULL(return_value); } @@ -3736,7 +3736,6 @@ ZEND_METHOD(FFI, new) /* {{{ */ bool owned = 1; bool persistent = 0; bool is_const = 0; - zend_ffi_flags flags = ZEND_FFI_FLAG_OWNED; ZEND_FFI_VALIDATE_API_RESTRICTION(); ZEND_PARSE_PARAMETERS_START(1, 3) @@ -3746,9 +3745,7 @@ ZEND_METHOD(FFI, new) /* {{{ */ Z_PARAM_BOOL(persistent) ZEND_PARSE_PARAMETERS_END(); - if (!owned) { - flags &= ~ZEND_FFI_FLAG_OWNED; - } + zend_ffi_flags flags = owned ? ZEND_FFI_FLAG_OWNED : 0; if (persistent) { flags |= ZEND_FFI_FLAG_PERSISTENT; @@ -3871,7 +3868,7 @@ ZEND_METHOD(FFI, free) /* {{{ */ } else if (!(cdata->flags & ZEND_FFI_FLAG_OWNED)) { pefree(cdata->ptr, cdata->flags & ZEND_FFI_FLAG_PERSISTENT); cdata->ptr = NULL; - cdata->flags &= ~(ZEND_FFI_FLAG_OWNED|ZEND_FFI_FLAG_PERSISTENT); + cdata->flags = (zend_ffi_flags)(cdata->flags & ~(ZEND_FFI_FLAG_OWNED|ZEND_FFI_FLAG_PERSISTENT)); cdata->std.handlers = &zend_ffi_cdata_free_handlers; } else { zend_throw_error(zend_ffi_exception_ce, "free() non a C pointer"); @@ -4045,7 +4042,7 @@ ZEND_METHOD(FFI, cast) /* {{{ */ if (old_cdata->flags & ZEND_FFI_FLAG_OWNED) { if (GC_REFCOUNT(&old_cdata->std) == 1 && Z_REFCOUNT_P(arg) == 1) { /* transfer ownership */ - old_cdata->flags &= ~ZEND_FFI_FLAG_OWNED; + old_cdata->flags = (zend_ffi_flags)(old_cdata->flags & ~ZEND_FFI_FLAG_OWNED); cdata->flags |= ZEND_FFI_FLAG_OWNED; } else { //???zend_throw_error(zend_ffi_exception_ce, "Attempt to cast owned C pointer"); @@ -4282,7 +4279,7 @@ ZEND_METHOD(FFI, addr) /* {{{ */ } if (cdata->flags & ZEND_FFI_FLAG_OWNED) { /* transfer ownership */ - cdata->flags &= ~ZEND_FFI_FLAG_OWNED; + cdata->flags = (zend_ffi_flags)(cdata->flags & ~ZEND_FFI_FLAG_OWNED); new_cdata->flags |= ZEND_FFI_FLAG_OWNED; } } From 98fc9f4a050c40d3753efa2ddcb7d6cd02096b65 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 22 Feb 2023 10:42:31 +0100 Subject: [PATCH 4/8] ext/dom: add cast to work around -Wassign-enum --- ext/dom/element.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/dom/element.c b/ext/dom/element.c index 19cef5834657..5109bc9b9767 100644 --- a/ext/dom/element.c +++ b/ext/dom/element.c @@ -1026,7 +1026,7 @@ static void php_set_attribute_id(xmlAttrPtr attrp, bool is_id) /* {{{ */ } } else if (is_id == 0 && attrp->atype == XML_ATTRIBUTE_ID) { xmlRemoveID(attrp->doc, attrp); - attrp->atype = 0; + attrp->atype = (xmlAttributeType)0; } } /* }}} */ From 16db9e891cf061f61999c5134f67692e2d9fa3f1 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 22 Feb 2023 10:44:56 +0100 Subject: [PATCH 5/8] ext/opcache/jit: add casts to work around -Wassign-enum --- ext/opcache/jit/zend_jit_trace.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c index ce7bb1374440..b71ff9e6bab5 100644 --- a/ext/opcache/jit/zend_jit_trace.c +++ b/ext/opcache/jit/zend_jit_trace.c @@ -7634,7 +7634,7 @@ int ZEND_FASTCALL zend_jit_trace_hot_root(zend_execute_data *execute_data, const if (stop & ZEND_JIT_TRACE_HALT) { ret = -1; } - stop &= ~ZEND_JIT_TRACE_HALT; + stop = (zend_jit_trace_stop)(stop & ~ZEND_JIT_TRACE_HALT); if (UNEXPECTED(trace_buffer[1].opline != orig_opline)) { orig_opline = trace_buffer[1].opline; @@ -7972,7 +7972,7 @@ int ZEND_FASTCALL zend_jit_trace_hot_side(zend_execute_data *execute_data, uint3 if (stop & ZEND_JIT_TRACE_HALT) { ret = -1; } - stop &= ~ZEND_JIT_TRACE_HALT; + stop = (zend_jit_trace_stop)(stop & ~ZEND_JIT_TRACE_HALT); if (UNEXPECTED(trace_buffer->start != ZEND_JIT_TRACE_START_SIDE)) { if (JIT_G(debug) & ZEND_JIT_DEBUG_TRACE_START) { From 929b994d3f070a9e732a8e0435f15b8abfc82945 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 22 Feb 2023 10:46:49 +0100 Subject: [PATCH 6/8] ext/mysqlnd: remove no-op `&=` operation The flags were set to zero right before this operation, so it's impossible for the `&=` to remove any flag. --- ext/mysqlnd/mysqlnd_ps.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/ext/mysqlnd/mysqlnd_ps.c b/ext/mysqlnd/mysqlnd_ps.c index 15ccec4522be..2726b631b1ab 100644 --- a/ext/mysqlnd/mysqlnd_ps.c +++ b/ext/mysqlnd/mysqlnd_ps.c @@ -1149,9 +1149,6 @@ MYSQLND_METHOD(mysqlnd_stmt, bind_parameters)(MYSQLND_STMT * const s, MYSQLND_PA /* Don't update is_ref, or we will leak during conversion */ Z_TRY_ADDREF(stmt->param_bind[i].zv); stmt->param_bind[i].flags = 0; - if (stmt->param_bind[i].type == MYSQL_TYPE_LONG_BLOB) { - stmt->param_bind[i].flags &= ~MYSQLND_PARAM_BIND_BLOB_USED; - } } stmt->send_types_to_server = 1; } else if (param_bind && param_bind != stmt->param_bind) { From 3796adfbf0379e8662ab80696125e1c196f60dec Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 22 Feb 2023 10:46:15 +0100 Subject: [PATCH 7/8] ext/mysqlnd: add casts to work around -Wassign-enum --- ext/mysqlnd/mysqlnd_ps.c | 6 +++--- ext/mysqlnd/mysqlnd_ps_codec.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ext/mysqlnd/mysqlnd_ps.c b/ext/mysqlnd/mysqlnd_ps.c index 2726b631b1ab..35edb65e05ab 100644 --- a/ext/mysqlnd/mysqlnd_ps.c +++ b/ext/mysqlnd/mysqlnd_ps.c @@ -919,7 +919,7 @@ MYSQLND_METHOD(mysqlnd_stmt, reset)(MYSQLND_STMT * const s) /* Reset Long Data */ for (i = 0; i < stmt->param_count; i++) { if (stmt->param_bind[i].flags & MYSQLND_PARAM_BIND_BLOB_USED) { - stmt->param_bind[i].flags &= ~MYSQLND_PARAM_BIND_BLOB_USED; + stmt->param_bind[i].flags = (enum_param_bind_flags)(stmt->param_bind[i].flags & ~MYSQLND_PARAM_BIND_BLOB_USED); } } } @@ -1148,7 +1148,7 @@ MYSQLND_METHOD(mysqlnd_stmt, bind_parameters)(MYSQLND_STMT * const s, MYSQLND_PA /* Prevent from freeing */ /* Don't update is_ref, or we will leak during conversion */ Z_TRY_ADDREF(stmt->param_bind[i].zv); - stmt->param_bind[i].flags = 0; + stmt->param_bind[i].flags = (enum_param_bind_flags)0; } stmt->send_types_to_server = 1; } else if (param_bind && param_bind != stmt->param_bind) { @@ -1204,7 +1204,7 @@ MYSQLND_METHOD(mysqlnd_stmt, bind_one_parameter)(MYSQLND_STMT * const s, unsigne zval_ptr_dtor(&stmt->param_bind[param_no].zv); if (type == MYSQL_TYPE_LONG_BLOB) { /* The client will use stmt_send_long_data */ - stmt->param_bind[param_no].flags &= ~MYSQLND_PARAM_BIND_BLOB_USED; + stmt->param_bind[param_no].flags = (enum_param_bind_flags)(stmt->param_bind[param_no].flags & ~MYSQLND_PARAM_BIND_BLOB_USED); } ZVAL_COPY_VALUE(&stmt->param_bind[param_no].zv, zv); stmt->param_bind[param_no].type = type; diff --git a/ext/mysqlnd/mysqlnd_ps_codec.c b/ext/mysqlnd/mysqlnd_ps_codec.c index 3b38d86273b6..36816951b572 100644 --- a/ext/mysqlnd/mysqlnd_ps_codec.c +++ b/ext/mysqlnd/mysqlnd_ps_codec.c @@ -768,7 +768,7 @@ mysqlnd_stmt_execute_store_param_values(MYSQLND_STMT_DATA * stmt, zval * copies, break; case MYSQL_TYPE_LONG_BLOB: if (stmt->param_bind[i].flags & MYSQLND_PARAM_BIND_BLOB_USED) { - stmt->param_bind[i].flags &= ~MYSQLND_PARAM_BIND_BLOB_USED; + stmt->param_bind[i].flags = (enum_param_bind_flags)(stmt->param_bind[i].flags & ~MYSQLND_PARAM_BIND_BLOB_USED); } else { /* send_long_data() not called, send empty string */ *p = php_mysqlnd_net_store_length(*p, 0); From 3678c0a30b8c89d93217879070b0b5d5e211911f Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 22 Feb 2023 11:35:41 +0100 Subject: [PATCH 8/8] ext/openssl: add cast to work around -Wassign-enum --- ext/openssl/xp_ssl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c index 048076808925..41032da58bc9 100644 --- a/ext/openssl/xp_ssl.c +++ b/ext/openssl/xp_ssl.c @@ -2323,7 +2323,7 @@ static inline int php_openssl_tcp_sockop_accept(php_stream *stream, php_openssl_ if (xparam->outputs.client && sock->enable_on_connect) { /* remove the client bit */ - sock->method &= ~STREAM_CRYPTO_IS_CLIENT; + sock->method = (php_stream_xport_crypt_method_t)(sock->method & ~STREAM_CRYPTO_IS_CLIENT); clisockdata->method = sock->method;