Details
-
Bug
-
Resolution: Fixed
-
Unknown
-
None
-
None
-
None
Description
Summary
Parsing
[{"$code" : "A"}] |
results in BSON data with an unexpected "\xbe" key:
% echo "0E0000000DBE0002000000410000" | ~/code/specifications/source/bson-corpus/tests/bsonview -x
|
0e000000 0d "\xbe" 00 02000000 "A" 00 00
|
The same"\xbe" key appears for parsing $dbPointer.
The expected behavior is to parse to an array document with the key "0". The expected parsed BSON is to be equivalent to parsing:
{"0" : {"$code" : "A"}} |
results in BSON data with the expected "0" key:
% echo "0E0000000D300002000000410000" | ~/code/specifications/source/bson-corpus/tests/bsonview -x
|
0e000000 0d "0" 00 02000000 "A" 00 00
|
Environment
libbson 1.24.1 on macOS 12.6.7 arm64. Clang 16.0.5.
How to Reproduce
Here is a branch with a failing test: https://github.com/mongodb/mongo-c-driver/compare/master...kevinAlbs:mongo-c-driver:code_parsing_bug?expand=1 :
// Test parsing `[ {"$code" : "A"} ]` and `{ "0": {"$code" : "A"} }`. Results
|
// in incorrect unequal BSON.
|
{
|
bson_t *b1;
|
{
|
// Parsing `[ {"$code" : "A"} ]` results in an invalid key.
|
const char *json = BSON_STR ([ {"$code" : "A"} ]);
|
bson_error_t error;
|
b1 = bson_new_from_json ((const uint8_t *) json, -1, &error);
|
ASSERT_OR_PRINT (b1, error);
|
printf ("bson parsed from %s:\n", json);
|
dump_bson (b1);
|
}
|
|
|
bson_t *b2;
|
{
|
const char *json = BSON_STR ({"0" : {"$code" : "A"}});
|
bson_error_t error;
|
b2 = bson_new_from_json ((const uint8_t *) json, -1, &error);
|
ASSERT_OR_PRINT (b2, error);
|
printf ("bson parsed from %s:\n", json);
|
dump_bson (b2);
|
}
|
|
|
ASSERT (bson_equal (b1, b2));
|
bson_destroy (b2);
|
bson_destroy (b1);
|
}
|