From 90836bf8b3218ff5ad3b7f48b999204cff3a1172 Mon Sep 17 00:00:00 2001 From: PurHur Date: Mon, 20 Jul 2026 00:21:24 +0000 Subject: [PATCH] Test: lock fputcsv enum field Error parity (#5898) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit VmFputcsv already throws Zend’s Error for enum cases in fields (assign and void). Add repro + compliance PHPT so the php-src-strict contract stays green. Co-authored-by: Cursor --- .../cases/stdlib/fputcsv_enum_field.phpt | 25 +++++++++++++++++ .../cases/stdlib/fputcsv_enum_field_jit.phpt | 24 +++++++++++++++++ test/repro/issue_5898_fputcsv_enum_field.php | 27 +++++++++++++++++++ 3 files changed, 76 insertions(+) create mode 100644 test/compliance/cases/stdlib/fputcsv_enum_field.phpt create mode 100644 test/compliance/cases/stdlib/fputcsv_enum_field_jit.phpt create mode 100644 test/repro/issue_5898_fputcsv_enum_field.php diff --git a/test/compliance/cases/stdlib/fputcsv_enum_field.phpt b/test/compliance/cases/stdlib/fputcsv_enum_field.phpt new file mode 100644 index 00000000000..e851138690d --- /dev/null +++ b/test/compliance/cases/stdlib/fputcsv_enum_field.phpt @@ -0,0 +1,25 @@ +--TEST-- +stdlib fputcsv() enum field → Error like Zend (#5898, ext/standard/file.c) +--FILE-- +getMessage(), PHP_EOL; +} +fclose($fp); +$fp2 = fopen('php://memory', 'r+'); +try { + fputcsv($fp2, [E::A]); + echo "void_ok\n"; +} catch (Throwable $e) { + echo 'void:', get_class($e), ': ', $e->getMessage(), PHP_EOL; +} +fclose($fp2); +--EXPECT-- +Error: Object of class E could not be converted to string +void:Error: Object of class E could not be converted to string diff --git a/test/compliance/cases/stdlib/fputcsv_enum_field_jit.phpt b/test/compliance/cases/stdlib/fputcsv_enum_field_jit.phpt new file mode 100644 index 00000000000..476d98d4c93 --- /dev/null +++ b/test/compliance/cases/stdlib/fputcsv_enum_field_jit.phpt @@ -0,0 +1,24 @@ +--TEST-- +stdlib fputcsv() enum field → Error like Zend JIT (#5898, ext/standard/file.c) +--FILE-- +getMessage(), PHP_EOL; +} +fclose($fp); +$fp2 = fopen('php://memory', 'r+'); +try { + fputcsv($fp2, [E::A]); + echo "void_ok\n"; +} catch (Throwable $e) { + echo 'void:', get_class($e), ': ', $e->getMessage(), PHP_EOL; +} +fclose($fp2); +--EXPECT-- +Error: Object of class E could not be converted to string +void:Error: Object of class E could not be converted to string diff --git a/test/repro/issue_5898_fputcsv_enum_field.php b/test/repro/issue_5898_fputcsv_enum_field.php new file mode 100644 index 00000000000..c27b9b00686 --- /dev/null +++ b/test/repro/issue_5898_fputcsv_enum_field.php @@ -0,0 +1,27 @@ +getMessage(), PHP_EOL; +} +fclose($fp); + +$fp2 = fopen('php://memory', 'r+'); +try { + fputcsv($fp2, [E::A]); + echo "void_ok\n"; +} catch (Throwable $e) { + echo 'void:', get_class($e), ': ', $e->getMessage(), PHP_EOL; +} +fclose($fp2);