diff --git a/.github/scripts/windows/test_task.bat b/.github/scripts/windows/test_task.bat index 5762aa32414e4..19ccf5b06359c 100644 --- a/.github/scripts/windows/test_task.bat +++ b/.github/scripts/windows/test_task.bat @@ -141,7 +141,7 @@ copy /-y %DEPS_DIR%\bin\*.dll %PHP_BUILD_DIR%\* mkdir c:\tests_tmp -nmake test TESTS="%OPCACHE_OPTS% -g FAIL,BORK,LEAK,XLEAK --no-progress -q --offline --show-diff --show-slow 1000 --set-timeout 120 --temp-source c:\tests_tmp --temp-target c:\tests_tmp --bless %PARALLEL%" +nmake test TESTS="%OPCACHE_OPTS% -g FAIL,BORK,LEAK,XLEAK --no-progress -q --offline --show-diff --show-slow 1000 --set-timeout 120 --temp-source c:\tests_tmp --temp-target c:\tests_tmp --bless %PARALLEL% ext\pgsql" set EXIT_CODE=%errorlevel% diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 6b7f6afc446ae..f1ef6e92b14e8 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -46,7 +46,7 @@ env: CXX: ccache g++ jobs: LINUX_X64: - if: github.repository == 'php/php-src' || github.event_name == 'pull_request' + if: false services: mysql: image: mysql:8.3 @@ -135,7 +135,7 @@ jobs: if: ${{ !matrix.asan }} uses: ./.github/actions/verify-generated-files LINUX_X32: - if: github.repository == 'php/php-src' || github.event_name == 'pull_request' + if: false name: LINUX_X32_DEBUG_ZTS runs-on: ubuntu-latest container: @@ -181,7 +181,7 @@ jobs: -d zend_extension=opcache.so -d opcache.enable_cli=1 MACOS_DEBUG_NTS: - if: github.repository == 'php/php-src' || github.event_name == 'pull_request' + if: false runs-on: macos-14 steps: - name: git checkout @@ -242,7 +242,7 @@ jobs: run: .github/scripts/windows/test.bat BENCHMARKING: name: BENCHMARKING - if: github.repository == 'php/php-src' || github.event_name == 'pull_request' + if: false runs-on: ubuntu-22.04 steps: - name: git checkout @@ -338,7 +338,7 @@ jobs: $(git merge-base ${{ github.event.pull_request.base.sha }} ${{ github.sha }}) \ > $GITHUB_STEP_SUMMARY FREEBSD: - if: github.repository == 'php/php-src' || github.event_name == 'pull_request' + if: false name: FREEBSD runs-on: ubuntu-latest timeout-minutes: 50 diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index e8fb99c7aca46..241dc214d8ebd 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -1873,7 +1873,10 @@ static void php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, zend_long result_ zval dataset; ZVAL_COPY_VALUE(&dataset, return_value); - object_init_ex(return_value, ce); + zend_result obj_initialized = object_init_ex(return_value, ce); + if (UNEXPECTED(obj_initialized == FAILURE)) { + RETURN_THROWS(); + } if (!ce->default_properties_count && !ce->__set) { Z_OBJ_P(return_value)->properties = Z_ARR(dataset); } else { diff --git a/ext/pgsql/tests/config.inc b/ext/pgsql/tests/config.inc index 66ba4810203af..e3f840654596c 100644 --- a/ext/pgsql/tests/config.inc +++ b/ext/pgsql/tests/config.inc @@ -20,4 +20,4 @@ $table_def = "CREATE TABLE {$table_name} (num int, str text, bin bytea);"; $table_def_92 = "CREATE TABLE {$table_name_92} (textary text[], jsn json);"; $field_name = "num"; // For pg_field_num() -?> +?> \ No newline at end of file diff --git a/ext/pgsql/tests/pg_fetch_object_with_abstract_class.phpt b/ext/pgsql/tests/pg_fetch_object_with_abstract_class.phpt new file mode 100644 index 0000000000000..d04e66a043b87 --- /dev/null +++ b/ext/pgsql/tests/pg_fetch_object_with_abstract_class.phpt @@ -0,0 +1,59 @@ +--TEST-- +pg_fetch_object() with abstract class name +--EXTENSIONS-- +pgsql +--SKIPIF-- + +--FILE-- +getMessage(), PHP_EOL; +} + +try { + $result = pg_query($db, $sql); + var_dump(pg_fetch_object($result, NULL, 'C')); +} catch(Throwable $e) { + echo $e::class, ': ', $e->getMessage(), PHP_EOL; +} + +try { + $result = pg_query($db, $sql); + var_dump(pg_fetch_object($result, NULL, 'E')); +} catch(Throwable $e) { + echo $e::class, ': ', $e->getMessage(), PHP_EOL; +} + +?> +--CLEAN-- + +--EXPECT-- +Error: Cannot instantiate interface I +Error: Cannot instantiate abstract class C +Error: Cannot instantiate enum E diff --git a/run-tests.php b/run-tests.php index a06f0958d1b1e..e0de7ea6db5cf 100755 --- a/run-tests.php +++ b/run-tests.php @@ -2042,7 +2042,7 @@ function run_test(string $php, $file, array $env): string @unlink($temp_skipif); @unlink($test_skipif); @unlink($tmp_post); - @unlink($temp_clean); + // @unlink($temp_clean); @unlink($test_clean); @unlink($preload_filename); @@ -2534,11 +2534,12 @@ function run_test(string $php, $file, array $env): string if (!$no_clean) { $extra = !IS_WINDOWS ? "unset REQUEST_METHOD; unset QUERY_STRING; unset PATH_TRANSLATED; unset SCRIPT_FILENAME; unset REQUEST_METHOD;" : ""; + var_dump($test_clean); $clean_output = system_with_timeout("$extra $orig_php $pass_options -q $orig_ini_settings $no_file_cache \"$test_clean\"", $env); } if (!$cfg['keep']['clean']) { - @unlink($test_clean); + // @unlink($test_clean); } } @@ -2674,6 +2675,8 @@ function run_test(string $php, $file, array $env): string if (!$leaked && !$failed_headers) { // If the test passed and CLEAN produced output, report test as borked. + var_dump("clean output: ",bin2hex(string: $clean_output??'')); + $clean_output = trim($clean_output ?? ''); if ($clean_output) { show_result("BORK", $output, $tested_file, 'reason: invalid output from CLEAN', $temp_filenames); $PHP_FAILED_TESTS['BORKED'][] = [