-
-
Notifications
You must be signed in to change notification settings - Fork 7.3k
Closed
Labels
aspect: binary formatsBSON, CBOR, MessagePack, UBJSONBSON, CBOR, MessagePack, UBJSONconfirmedkind: bugsolution: proposed fixa fix for the issue has been proposed and waits for confirmationa fix for the issue has been proposed and waits for confirmation
Milestone
Description
I found this library and thought it was very interesting and like a lot about it and decided to brows the source code a little bit. I am thinking I will try using this in my next project. In my browsing I found the following problem:
| case 0x7F: // UTF-8 string (indefinite length) |
According to section 2.2.2 of the CBOR RFC 7049 an indefinite length string is a list of definite length strings terminated by the terminal byte 0xFF. As such the following code snippet should print the same string twice.
using json = nlohmann::json;
std::vector<uint8_t> v_cbor = {
0x7F,
0x64,
'a', 'b', 'c', 'd',
0x63,
'1', '2', '3',
0xFF
};
json j = json::from_cbor(v_cbor);
std::cout << "\"abcd123\"\n";
std::cout << j << std::endl;But as of version 3.1.0 it prints:
"abcd123"
"dabcdc123"
Changing that case to something like:
case 0x7F: // UTF-8 string (indefinite length)
{
std::vector<string_t> result_list;
std::size_t size = 0;
while (get() != 0xFF)
{
unexpect_eof();
result_list.push_back(get_cbor_string());
size += result_list.back().size();
}
string_t result;
result.reserve(size);
for (auto r: result_list) { result.append(r); }
return result;
}Fixes it. I'm not sure if this is the way you want to do it though.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
aspect: binary formatsBSON, CBOR, MessagePack, UBJSONBSON, CBOR, MessagePack, UBJSONconfirmedkind: bugsolution: proposed fixa fix for the issue has been proposed and waits for confirmationa fix for the issue has been proposed and waits for confirmation