--TEST--
MongoDB\BSON\toPHP(): BSON decoding exceptions for bson_iter_visit_all() failure
--FILE--
<?php
require_once __DIR__ . '/../utils/basic.inc';
$tests = array(
// Invalid UTF-8 character in root document's field name
str_replace('INVALID!', "INVALID\xFE", fromPHP(['INVALID!' => 'bar'])),
// Invalid UTF-8 character in embedded document's field name
str_replace('INVALID!', "INVALID\xFE", fromPHP(['foo' => ['INVALID!' => 'bar']])),
// Invalid UTF-8 character in string within array field
str_replace('INVALID!', "INVALID\xFE", fromPHP(['foo' => ['INVALID!']])),
/* Note: we don't use a three-character string in the underflow case, as
* the 4-byte string length and payload (i.e. three characters + null byte)
* coincidentally satisfy the expected size for an 8-byte double. We also
* don't use a four-character string, since its null byte would be
* interpreted as the document terminator. The actual document terminator
* would then remain in the buffer and trigger a "did not exhaust" error.
*/
pack('VCa*xVa*xx', 17, 1, 'foo', 3, 'ab'), // Invalid field type (underflow)
pack('VCa*xVa*xx', 20, 1, 'foo', 6, 'abcde'), // Invalid field type (overflow)
);
foreach ($tests as $bson) {
echo throws(function() use ($bson) {
toPHP($bson);
}, 'MongoDB\Driver\Exception\UnexpectedValueException'), "\n";
}
?>
===DONE===
<?php exit(0); ?>
--EXPECT--
OK: Got MongoDB\Driver\Exception\UnexpectedValueException
Detected corrupt BSON data for field path '' at offset 4
OK: Got MongoDB\Driver\Exception\UnexpectedValueException
Detected corrupt BSON data for field path 'foo' at offset 0
OK: Got MongoDB\Driver\Exception\UnexpectedValueException
Detected corrupt BSON data for field path 'foo' at offset 0
OK: Got MongoDB\Driver\Exception\UnexpectedValueException
Detected corrupt BSON data for field path '' at offset 9
OK: Got MongoDB\Driver\Exception\UnexpectedValueException
Detected unknown BSON type 0x65 for field path "". Are you using the latest driver?
===DONE===