mirror of
https://github.com/macintoshplus/mongo-php-driver.git
synced 2026-04-29 11:33:12 +02:00
6887226d34
* Add missing macros for declaring arguments * Add macros to define disabled constructor and __wakeup * Define arginfo via stubs for BSON classes * Declare tentative return types in interfaces * Add correct return type for __set_state methods * Generate class entries for BSON classes * Declare Binary class constants in stub file * Use stubs in exception classes * Add stubs for monitoring classes * Fix wrong JsonSerializable class in BSON stubs * Disable declaration-after-statement This is necessary to let the generated arginfo files compile * Use stubs for driver classes * Fix deprecation messages in tests * Add missing macro * Fix tests relying on value injection * Parse parameters in disabled constructor/wakup function * Add note about arginfo files to contribution docs * Add GitHub action to check generated arginfo files * PHPC-2115: Use DateTimeInterface in UTCDateTime constructor signature * Don't install mongodb extension in GitHub actions workflows * Change indentation in stub files * Use individual #if conditions for each stub method * Make disabled constructor/wakeup methods static * Fix bulkWrite parameter name * Use %d to match property count in tests * Ensure all classes with disabled serialisation declare __wakeup
87 lines
3.1 KiB
PHP
87 lines
3.1 KiB
PHP
--TEST--
|
|
MongoDB\BSON\fromPHP(): Serializable returns document with null bytes in field name
|
|
--FILE--
|
|
<?php
|
|
|
|
require_once __DIR__ . '/../utils/basic.inc';
|
|
|
|
class MySerializable implements MongoDB\BSON\Serializable
|
|
{
|
|
private $data;
|
|
|
|
public function __construct($data)
|
|
{
|
|
$this->data = $data;
|
|
}
|
|
|
|
#[\ReturnTypeWillChange]
|
|
public function bsonSerialize()
|
|
{
|
|
return $this->data;
|
|
}
|
|
}
|
|
|
|
echo "\nTesting array with one leading null byte in field name\n";
|
|
echo throws(function() {
|
|
fromPHP(new MySerializable(["\0" => 1]));
|
|
}, 'MongoDB\Driver\Exception\UnexpectedValueException'), "\n";
|
|
|
|
echo "\nTesting array with one trailing null byte in field name\n";
|
|
echo throws(function() {
|
|
fromPHP(new MySerializable(["a\0" => 1]));
|
|
}, 'MongoDB\Driver\Exception\UnexpectedValueException'), "\n";
|
|
|
|
echo "\nTesting array with multiple null bytes in field name\n";
|
|
echo throws(function() {
|
|
fromPHP(new MySerializable(["\0\0\0" => 1]));
|
|
}, 'MongoDB\Driver\Exception\UnexpectedValueException'), "\n";
|
|
|
|
/* Per PHPC-884, field names with a leading null byte are ignored when encoding
|
|
* a document from an object's property hash table, since PHP uses leading bytes
|
|
* to denote protected and private properties. However, in this case the object
|
|
* was returned from Serializable::bsonSerialize() and we skip the check for
|
|
* protected and private properties. */
|
|
echo "\nTesting object with one leading null byte in field name\n";
|
|
echo throws(function() {
|
|
fromPHP(new MySerializable((object) ["\0" => 1]));
|
|
}, 'MongoDB\Driver\Exception\UnexpectedValueException'), "\n";
|
|
|
|
echo "\nTesting object with one trailing null byte in field name\n";
|
|
echo throws(function() {
|
|
fromPHP(new MySerializable((object) ["a\0" => 1]));
|
|
}, 'MongoDB\Driver\Exception\UnexpectedValueException'), "\n";
|
|
|
|
echo "\nTesting object with multiple null bytes in field name\n";
|
|
echo throws(function() {
|
|
fromPHP(new MySerializable((object) ["\0\0\0" => 1]));
|
|
}, 'MongoDB\Driver\Exception\UnexpectedValueException'), "\n";
|
|
|
|
?>
|
|
===DONE===
|
|
<?php exit(0); ?>
|
|
--EXPECT--
|
|
Testing array with one leading null byte in field name
|
|
OK: Got MongoDB\Driver\Exception\UnexpectedValueException
|
|
BSON keys cannot contain null bytes. Unexpected null byte after "".
|
|
|
|
Testing array with one trailing null byte in field name
|
|
OK: Got MongoDB\Driver\Exception\UnexpectedValueException
|
|
BSON keys cannot contain null bytes. Unexpected null byte after "a".
|
|
|
|
Testing array with multiple null bytes in field name
|
|
OK: Got MongoDB\Driver\Exception\UnexpectedValueException
|
|
BSON keys cannot contain null bytes. Unexpected null byte after "".
|
|
|
|
Testing object with one leading null byte in field name
|
|
OK: Got MongoDB\Driver\Exception\UnexpectedValueException
|
|
BSON keys cannot contain null bytes. Unexpected null byte after "".
|
|
|
|
Testing object with one trailing null byte in field name
|
|
OK: Got MongoDB\Driver\Exception\UnexpectedValueException
|
|
BSON keys cannot contain null bytes. Unexpected null byte after "a".
|
|
|
|
Testing object with multiple null bytes in field name
|
|
OK: Got MongoDB\Driver\Exception\UnexpectedValueException
|
|
BSON keys cannot contain null bytes. Unexpected null byte after "".
|
|
===DONE===
|