Skip to content

Commit eda3d1b

Browse files
committed
Add PHPT test for Rule A probe using mysqli_driver
mysqli_driver is a final internal class with a C-level create_object handler and no __serialize/__unserialize/__sleep/__wakeup. It is available in every standard PHP installation (bundled extension) so no external package is needed. The test verifies that object_init_ex() succeeds for such classes and that properties are preserved through the round-trip. Also add mysqli to the CI extension list so the test runs rather than being skipped.
1 parent f133249 commit eda3d1b

2 files changed

Lines changed: 30 additions & 3 deletions

File tree

.github/workflows/test.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ jobs:
3636
uses: shivammathur/setup-php@v2
3737
with:
3838
php-version: ${{ matrix.php }}
39-
extensions: mongodb
39+
extensions: mongodb, mysqli
4040
coverage: none
4141
tools: none
4242
env:
@@ -79,7 +79,7 @@ jobs:
7979
uses: shivammathur/setup-php@v2
8080
with:
8181
php-version: '8.4'
82-
extensions: mongodb
82+
extensions: mongodb, mysqli
8383
coverage: none
8484
tools: none
8585

@@ -170,7 +170,7 @@ jobs:
170170
uses: shivammathur/setup-php@v2
171171
with:
172172
php-version: ${{ matrix.php }}
173-
extensions: mongodb
173+
extensions: mongodb, mysqli
174174
coverage: none
175175
tools: none
176176

tests/deepclone_rule_a_probe.phpt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
--TEST--
2+
Rule A: final internal classes with create_object but no serialization API round-trip via probe
3+
--EXTENSIONS--
4+
deepclone
5+
mysqli
6+
--FILE--
7+
<?php
8+
9+
// mysqli_driver is a final internal class with a C-level create_object handler
10+
// and no __serialize/__unserialize/__sleep/__wakeup.
11+
12+
$driver = new mysqli_driver();
13+
$driver->report_mode = MYSQLI_REPORT_ALL;
14+
15+
$clone = deepclone_from_array(deepclone_to_array($driver));
16+
17+
var_dump($clone instanceof mysqli_driver);
18+
var_dump($clone !== $driver);
19+
var_dump($clone->report_mode === $driver->report_mode);
20+
21+
echo "Done\n";
22+
?>
23+
--EXPECT--
24+
bool(true)
25+
bool(true)
26+
bool(true)
27+
Done

0 commit comments

Comments
 (0)