diff --git a/bin/functionMetadata_original.php b/bin/functionMetadata_original.php index 17be4631a9e..7a1f8930ab2 100644 --- a/bin/functionMetadata_original.php +++ b/bin/functionMetadata_original.php @@ -94,6 +94,118 @@ 'link' => ['hasSideEffects' => true], 'mkdir' => ['hasSideEffects' => true], 'move_uploaded_file' => ['hasSideEffects' => true], + 'mysqli_affected_rows' => ['hasSideEffects' => true], + 'mysqli_autocommit' => ['hasSideEffects' => true], + 'mysqli_begin_transaction' => ['hasSideEffects' => true], + 'mysqli_bind_param' => ['hasSideEffects' => true], + 'mysqli_bind_result' => ['hasSideEffects' => true], + 'mysqli_change_user' => ['hasSideEffects' => true], + 'mysqli_character_set_name' => ['hasSideEffects' => true], + 'mysqli_client_encoding' => ['hasSideEffects' => true], + 'mysqli_close' => ['hasSideEffects' => true], + 'mysqli_commit' => ['hasSideEffects' => true], + 'mysqli_connect' => ['hasSideEffects' => true], + 'mysqli_connect_errno' => ['hasSideEffects' => true], + 'mysqli_connect_error' => ['hasSideEffects' => true], + 'mysqli_data_seek' => ['hasSideEffects' => true], + 'mysqli_debug' => ['hasSideEffects' => true], + 'mysqli_dump_debug_info' => ['hasSideEffects' => true], + 'mysqli_errno' => ['hasSideEffects' => true], + 'mysqli_error' => ['hasSideEffects' => true], + 'mysqli_error_list' => ['hasSideEffects' => true], + 'mysqli_escape_string' => ['hasSideEffects' => true], + 'mysqli_execute' => ['hasSideEffects' => true], + 'mysqli_execute_query' => ['hasSideEffects' => true], + 'mysqli_fetch' => ['hasSideEffects' => true], + 'mysqli_fetch_all' => ['hasSideEffects' => true], + 'mysqli_fetch_array' => ['hasSideEffects' => true], + 'mysqli_fetch_assoc' => ['hasSideEffects' => true], + 'mysqli_fetch_column' => ['hasSideEffects' => true], + 'mysqli_fetch_field' => ['hasSideEffects' => true], + 'mysqli_fetch_lengths' => ['hasSideEffects' => true], + 'mysqli_fetch_object' => ['hasSideEffects' => true], + 'mysqli_fetch_row' => ['hasSideEffects' => true], + 'mysqli_field_count' => ['hasSideEffects' => true], + 'mysqli_field_seek' => ['hasSideEffects' => true], + 'mysqli_field_tell' => ['hasSideEffects' => true], + 'mysqli_free_result' => ['hasSideEffects' => true], + 'mysqli_get_cache_stats' => ['hasSideEffects' => true], + 'mysqli_get_charset' => ['hasSideEffects' => true], + 'mysqli_get_client_info' => ['hasSideEffects' => true], + 'mysqli_get_client_stats' => ['hasSideEffects' => true], + 'mysqli_get_client_version' => ['hasSideEffects' => true], + 'mysqli_get_connection_stats' => ['hasSideEffects' => true], + 'mysqli_get_host_info' => ['hasSideEffects' => true], + 'mysqli_get_links_stats' => ['hasSideEffects' => true], + 'mysqli_get_metadata' => ['hasSideEffects' => true], + 'mysqli_get_proto_info' => ['hasSideEffects' => true], + 'mysqli_get_server_info' => ['hasSideEffects' => true], + 'mysqli_get_server_version' => ['hasSideEffects' => true], + 'mysqli_get_warnings' => ['hasSideEffects' => true], + 'mysqli_info' => ['hasSideEffects' => true], + 'mysqli_init' => ['hasSideEffects' => true], + 'mysqli_insert_id' => ['hasSideEffects' => true], + 'mysqli_kill' => ['hasSideEffects' => true], + 'mysqli_more_results' => ['hasSideEffects' => true], + 'mysqli_multi_query' => ['hasSideEffects' => true], + 'mysqli_next_result' => ['hasSideEffects' => true], + 'mysqli_options' => ['hasSideEffects' => true], + 'mysqli_param_count' => ['hasSideEffects' => true], + 'mysqli_ping' => ['hasSideEffects' => true], + 'mysqli_poll' => ['hasSideEffects' => true], + 'mysqli_prepare' => ['hasSideEffects' => true], + 'mysqli_query' => ['hasSideEffects' => true], + 'mysqli_real_connect' => ['hasSideEffects' => true], + 'mysqli_real_escape_string' => ['hasSideEffects' => true], + 'mysqli_real_query' => ['hasSideEffects' => true], + 'mysqli_reap_async_query' => ['hasSideEffects' => true], + 'mysqli_refresh' => ['hasSideEffects' => true], + 'mysqli_release_savepoint' => ['hasSideEffects' => true], + 'mysqli_report' => ['hasSideEffects' => true], + 'mysqli_rollback' => ['hasSideEffects' => true], + 'mysqli_savepoint' => ['hasSideEffects' => true], + 'mysqli_select_db' => ['hasSideEffects' => true], + 'mysqli_send_long_data' => ['hasSideEffects' => true], + 'mysqli_set_charset' => ['hasSideEffects' => true], + 'mysqli_set_local_infile_default' => ['hasSideEffects' => true], + 'mysqli_set_local_infile_handler' => ['hasSideEffects' => true], + 'mysqli_set_opt' => ['hasSideEffects' => true], + 'mysqli_sqlstate' => ['hasSideEffects' => true], + 'mysqli_ssl_set' => ['hasSideEffects' => true], + 'mysqli_stat' => ['hasSideEffects' => true], + 'mysqli_stmt_affected_rows' => ['hasSideEffects' => true], + 'mysqli_stmt_attr_get' => ['hasSideEffects' => true], + 'mysqli_stmt_attr_set' => ['hasSideEffects' => true], + 'mysqli_stmt_bind_param' => ['hasSideEffects' => true], + 'mysqli_stmt_bind_result' => ['hasSideEffects' => true], + 'mysqli_stmt_close' => ['hasSideEffects' => true], + 'mysqli_stmt_data_seek' => ['hasSideEffects' => true], + 'mysqli_stmt_errno' => ['hasSideEffects' => true], + 'mysqli_stmt_error' => ['hasSideEffects' => true], + 'mysqli_stmt_error_list' => ['hasSideEffects' => true], + 'mysqli_stmt_execute' => ['hasSideEffects' => true], + 'mysqli_stmt_fetch' => ['hasSideEffects' => true], + 'mysqli_stmt_field_count' => ['hasSideEffects' => true], + 'mysqli_stmt_free_result' => ['hasSideEffects' => true], + 'mysqli_stmt_get_result' => ['hasSideEffects' => true], + 'mysqli_stmt_get_warnings' => ['hasSideEffects' => true], + 'mysqli_stmt_init' => ['hasSideEffects' => true], + 'mysqli_stmt_insert_id' => ['hasSideEffects' => true], + 'mysqli_stmt_more_results' => ['hasSideEffects' => true], + 'mysqli_stmt_next_result' => ['hasSideEffects' => true], + 'mysqli_stmt_num_rows' => ['hasSideEffects' => true], + 'mysqli_stmt_param_count' => ['hasSideEffects' => true], + 'mysqli_stmt_prepare' => ['hasSideEffects' => true], + 'mysqli_stmt_reset' => ['hasSideEffects' => true], + 'mysqli_stmt_result_metadata' => ['hasSideEffects' => true], + 'mysqli_stmt_send_long_data' => ['hasSideEffects' => true], + 'mysqli_stmt_sqlstate' => ['hasSideEffects' => true], + 'mysqli_stmt_store_result' => ['hasSideEffects' => true], + 'mysqli_store_result' => ['hasSideEffects' => true], + 'mysqli_thread_id' => ['hasSideEffects' => true], + 'mysqli_thread_safe' => ['hasSideEffects' => true], + 'mysqli_use_result' => ['hasSideEffects' => true], + 'mysqli_warning_count' => ['hasSideEffects' => true], 'ob_clean' => ['hasSideEffects' => true], 'ob_end_clean' => ['hasSideEffects' => true], 'ob_end_flush' => ['hasSideEffects' => true], diff --git a/resources/functionMetadata.php b/resources/functionMetadata.php index a01a7181a6e..2d5fbeda3dd 100644 --- a/resources/functionMetadata.php +++ b/resources/functionMetadata.php @@ -1392,6 +1392,118 @@ 'msgfmt_parse_message' => ['hasSideEffects' => false], 'mt_getrandmax' => ['hasSideEffects' => false], 'mt_rand' => ['hasSideEffects' => true], + 'mysqli_affected_rows' => ['hasSideEffects' => true], + 'mysqli_autocommit' => ['hasSideEffects' => true], + 'mysqli_begin_transaction' => ['hasSideEffects' => true], + 'mysqli_bind_param' => ['hasSideEffects' => true], + 'mysqli_bind_result' => ['hasSideEffects' => true], + 'mysqli_change_user' => ['hasSideEffects' => true], + 'mysqli_character_set_name' => ['hasSideEffects' => true], + 'mysqli_client_encoding' => ['hasSideEffects' => true], + 'mysqli_close' => ['hasSideEffects' => true], + 'mysqli_commit' => ['hasSideEffects' => true], + 'mysqli_connect' => ['hasSideEffects' => true], + 'mysqli_connect_errno' => ['hasSideEffects' => true], + 'mysqli_connect_error' => ['hasSideEffects' => true], + 'mysqli_data_seek' => ['hasSideEffects' => true], + 'mysqli_debug' => ['hasSideEffects' => true], + 'mysqli_dump_debug_info' => ['hasSideEffects' => true], + 'mysqli_errno' => ['hasSideEffects' => true], + 'mysqli_error' => ['hasSideEffects' => true], + 'mysqli_error_list' => ['hasSideEffects' => true], + 'mysqli_escape_string' => ['hasSideEffects' => true], + 'mysqli_execute' => ['hasSideEffects' => true], + 'mysqli_execute_query' => ['hasSideEffects' => true], + 'mysqli_fetch' => ['hasSideEffects' => true], + 'mysqli_fetch_all' => ['hasSideEffects' => true], + 'mysqli_fetch_array' => ['hasSideEffects' => true], + 'mysqli_fetch_assoc' => ['hasSideEffects' => true], + 'mysqli_fetch_column' => ['hasSideEffects' => true], + 'mysqli_fetch_field' => ['hasSideEffects' => true], + 'mysqli_fetch_lengths' => ['hasSideEffects' => true], + 'mysqli_fetch_object' => ['hasSideEffects' => true], + 'mysqli_fetch_row' => ['hasSideEffects' => true], + 'mysqli_field_count' => ['hasSideEffects' => true], + 'mysqli_field_seek' => ['hasSideEffects' => true], + 'mysqli_field_tell' => ['hasSideEffects' => true], + 'mysqli_free_result' => ['hasSideEffects' => true], + 'mysqli_get_cache_stats' => ['hasSideEffects' => true], + 'mysqli_get_charset' => ['hasSideEffects' => true], + 'mysqli_get_client_info' => ['hasSideEffects' => true], + 'mysqli_get_client_stats' => ['hasSideEffects' => true], + 'mysqli_get_client_version' => ['hasSideEffects' => true], + 'mysqli_get_connection_stats' => ['hasSideEffects' => true], + 'mysqli_get_host_info' => ['hasSideEffects' => true], + 'mysqli_get_links_stats' => ['hasSideEffects' => true], + 'mysqli_get_metadata' => ['hasSideEffects' => true], + 'mysqli_get_proto_info' => ['hasSideEffects' => true], + 'mysqli_get_server_info' => ['hasSideEffects' => true], + 'mysqli_get_server_version' => ['hasSideEffects' => true], + 'mysqli_get_warnings' => ['hasSideEffects' => true], + 'mysqli_info' => ['hasSideEffects' => true], + 'mysqli_init' => ['hasSideEffects' => true], + 'mysqli_insert_id' => ['hasSideEffects' => true], + 'mysqli_kill' => ['hasSideEffects' => true], + 'mysqli_more_results' => ['hasSideEffects' => true], + 'mysqli_multi_query' => ['hasSideEffects' => true], + 'mysqli_next_result' => ['hasSideEffects' => true], + 'mysqli_options' => ['hasSideEffects' => true], + 'mysqli_param_count' => ['hasSideEffects' => true], + 'mysqli_ping' => ['hasSideEffects' => true], + 'mysqli_poll' => ['hasSideEffects' => true], + 'mysqli_prepare' => ['hasSideEffects' => true], + 'mysqli_query' => ['hasSideEffects' => true], + 'mysqli_real_connect' => ['hasSideEffects' => true], + 'mysqli_real_escape_string' => ['hasSideEffects' => true], + 'mysqli_real_query' => ['hasSideEffects' => true], + 'mysqli_reap_async_query' => ['hasSideEffects' => true], + 'mysqli_refresh' => ['hasSideEffects' => true], + 'mysqli_release_savepoint' => ['hasSideEffects' => true], + 'mysqli_report' => ['hasSideEffects' => true], + 'mysqli_rollback' => ['hasSideEffects' => true], + 'mysqli_savepoint' => ['hasSideEffects' => true], + 'mysqli_select_db' => ['hasSideEffects' => true], + 'mysqli_send_long_data' => ['hasSideEffects' => true], + 'mysqli_set_charset' => ['hasSideEffects' => true], + 'mysqli_set_local_infile_default' => ['hasSideEffects' => true], + 'mysqli_set_local_infile_handler' => ['hasSideEffects' => true], + 'mysqli_set_opt' => ['hasSideEffects' => true], + 'mysqli_sqlstate' => ['hasSideEffects' => true], + 'mysqli_ssl_set' => ['hasSideEffects' => true], + 'mysqli_stat' => ['hasSideEffects' => true], + 'mysqli_stmt_affected_rows' => ['hasSideEffects' => true], + 'mysqli_stmt_attr_get' => ['hasSideEffects' => true], + 'mysqli_stmt_attr_set' => ['hasSideEffects' => true], + 'mysqli_stmt_bind_param' => ['hasSideEffects' => true], + 'mysqli_stmt_bind_result' => ['hasSideEffects' => true], + 'mysqli_stmt_close' => ['hasSideEffects' => true], + 'mysqli_stmt_data_seek' => ['hasSideEffects' => true], + 'mysqli_stmt_errno' => ['hasSideEffects' => true], + 'mysqli_stmt_error' => ['hasSideEffects' => true], + 'mysqli_stmt_error_list' => ['hasSideEffects' => true], + 'mysqli_stmt_execute' => ['hasSideEffects' => true], + 'mysqli_stmt_fetch' => ['hasSideEffects' => true], + 'mysqli_stmt_field_count' => ['hasSideEffects' => true], + 'mysqli_stmt_free_result' => ['hasSideEffects' => true], + 'mysqli_stmt_get_result' => ['hasSideEffects' => true], + 'mysqli_stmt_get_warnings' => ['hasSideEffects' => true], + 'mysqli_stmt_init' => ['hasSideEffects' => true], + 'mysqli_stmt_insert_id' => ['hasSideEffects' => true], + 'mysqli_stmt_more_results' => ['hasSideEffects' => true], + 'mysqli_stmt_next_result' => ['hasSideEffects' => true], + 'mysqli_stmt_num_rows' => ['hasSideEffects' => true], + 'mysqli_stmt_param_count' => ['hasSideEffects' => true], + 'mysqli_stmt_prepare' => ['hasSideEffects' => true], + 'mysqli_stmt_reset' => ['hasSideEffects' => true], + 'mysqli_stmt_result_metadata' => ['hasSideEffects' => true], + 'mysqli_stmt_send_long_data' => ['hasSideEffects' => true], + 'mysqli_stmt_sqlstate' => ['hasSideEffects' => true], + 'mysqli_stmt_store_result' => ['hasSideEffects' => true], + 'mysqli_store_result' => ['hasSideEffects' => true], + 'mysqli_thread_id' => ['hasSideEffects' => true], + 'mysqli_thread_safe' => ['hasSideEffects' => true], + 'mysqli_use_result' => ['hasSideEffects' => true], + 'mysqli_warning_count' => ['hasSideEffects' => true], 'net_get_interfaces' => ['hasSideEffects' => false], 'ngettext' => ['hasSideEffects' => false], 'nl2br' => ['hasSideEffects' => false], diff --git a/tests/PHPStan/Rules/Comparison/BooleanOrConstantConditionRuleTest.php b/tests/PHPStan/Rules/Comparison/BooleanOrConstantConditionRuleTest.php index cc628575f79..31397bf28b0 100644 --- a/tests/PHPStan/Rules/Comparison/BooleanOrConstantConditionRuleTest.php +++ b/tests/PHPStan/Rules/Comparison/BooleanOrConstantConditionRuleTest.php @@ -384,4 +384,11 @@ public function testBug10305(): void ]); } + public function testBug14473(): void + { + $this->treatPhpDocTypesAsCertain = true; + + $this->analyse([__DIR__ . '/data/bug-14473.php'], []); + } + } diff --git a/tests/PHPStan/Rules/Comparison/data/bug-14473.php b/tests/PHPStan/Rules/Comparison/data/bug-14473.php new file mode 100644 index 00000000000..c45fa4c05e5 --- /dev/null +++ b/tests/PHPStan/Rules/Comparison/data/bug-14473.php @@ -0,0 +1,27 @@ +