-
Type: Bug
-
Resolution: Works as Designed
-
Priority: Major - P3
-
None
-
Affects Version/s: 1.17.0-beta
-
Component/s: libbson
-
None
-
Environment:Ubuntu 16.04 with Qt
When creating a bson from a json string, decimal digits get lost when running in a QT environment in release mode.
Input string is
"{\"d\": 1.987}"
Output string (converted back to Json for readability) when running in debug mode with gdb enabled is
"{ "d" : { "$numberDouble" : "1.9870000000000000995" } }"
, which is fine, but when running in release mode it is
"{ "d" : { "$numberDouble" : "1.0" } }".
Tested with Qt 5.9.4 and current version 5.14.2.
This is the minimal example:
#include <QCoreApplication> #include <bson.h> #include <iostream> #define BSON_JSON_DEFAULT_BUF_SIZE (1 << 14) int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); std::string json = "{\"d\": 1.987}"; bson_t * bson; bson_error_t err; const uint8_t* data = (const uint8_t *)(json.c_str()); int len = -1; ///1 //bson = bson_new_from_json(data, len, &err); ///inside bson_new_from_json: if (len < 0) { len = (ssize_t) strlen ((const char *) data); } bson_json_reader_t *reader; bson = bson_new (); reader = bson_json_data_reader_new (false, BSON_JSON_DEFAULT_BUF_SIZE); bson_json_data_reader_ingest (reader, data, len); int r = bson_json_reader_read (reader, bson, &err); ///test: char* jsonD; if ((jsonD = bson_as_canonical_extended_json (bson, NULL))) { std::cout << "json from bson: " << jsonD << std::endl; } return a.exec(); }
When removing QCoreApplication and a.exec() everything works fine, so this is connected to Qt, but I cannot find out what is exactly going on in bson_json_reader_read(). I guess that Qt may define something in debug mode, which affects the bson library.
- is related to
-
CDRIVER-2063 JSON export prints insignificant digits / noise
- Closed