📝 cleanup after #1001
This commit is contained in:
parent
e737de8941
commit
9918523077
3 changed files with 84 additions and 85 deletions
|
@ -974,6 +974,7 @@ I deeply appreciate the help of the following people.
|
|||
- [johnfb](https://github.com/johnfb) found a bug in the implementation of CBOR's indefinite length strings.
|
||||
- [Paul Fultz II](https://github.com/pfultz2) added a note on the cget package manager.
|
||||
- [Wilson Lin](https://github.com/wla80) made the integration section of the README more concise.
|
||||
- [RalfBielig](https://github.com/ralfbielig) detected and fixed a memory leak in the parser callback.
|
||||
|
||||
Thanks a lot for helping out! Please [let me know](mailto:mail@nlohmann.me) if I forgot someone.
|
||||
|
||||
|
|
|
@ -1415,91 +1415,6 @@ TEST_CASE("parser class")
|
|||
});
|
||||
CHECK(j_empty_array == json());
|
||||
}
|
||||
|
||||
/*
|
||||
SECTION("skip in GeoJSON")
|
||||
{
|
||||
auto geojsonExample = R"(
|
||||
{ "type": "FeatureCollection",
|
||||
"features": [
|
||||
{ "type": "Feature",
|
||||
"geometry": {"type": "Point", "coordinates": [102.0, 0.5]},
|
||||
"properties": {"prop0": "value0"}
|
||||
},
|
||||
{ "type": "Feature",
|
||||
"geometry": {
|
||||
"type": "LineString",
|
||||
"coordinates": [
|
||||
[102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"prop0": "value0",
|
||||
"prop1": 0.0
|
||||
}
|
||||
},
|
||||
{ "type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Polygon",
|
||||
"coordinates": [
|
||||
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0],
|
||||
[100.0, 1.0], [100.0, 0.0] ]
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"prop0": "value0",
|
||||
"prop1": {"this": "that"}
|
||||
}
|
||||
}
|
||||
]
|
||||
})";
|
||||
|
||||
json::parser_callback_t cb = [&](int, json::parse_event_t event, json & parsed)
|
||||
{
|
||||
// skip uninteresting events
|
||||
if (event == json::parse_event_t::value and !parsed.is_primitive())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (event)
|
||||
{
|
||||
case json::parse_event_t::key:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
case json::parse_event_t::value:
|
||||
{
|
||||
return false;
|
||||
}
|
||||
case json::parse_event_t::object_start:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
case json::parse_event_t::object_end:
|
||||
{
|
||||
return false;
|
||||
}
|
||||
case json::parse_event_t::array_start:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
case json::parse_event_t::array_end:
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
auto j = json::parse(geojsonExample, cb, true);
|
||||
CHECK(j == json());
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
SECTION("constructing from contiguous containers")
|
||||
|
|
|
@ -1514,4 +1514,87 @@ TEST_CASE("regression tests")
|
|||
CHECK(ff.x == 3);
|
||||
nlohmann::json nj = lj; // This line works as expected
|
||||
}
|
||||
|
||||
SECTION("issue #1001 - Fix memory leak during parser callback")
|
||||
{
|
||||
auto geojsonExample = R"(
|
||||
{ "type": "FeatureCollection",
|
||||
"features": [
|
||||
{ "type": "Feature",
|
||||
"geometry": {"type": "Point", "coordinates": [102.0, 0.5]},
|
||||
"properties": {"prop0": "value0"}
|
||||
},
|
||||
{ "type": "Feature",
|
||||
"geometry": {
|
||||
"type": "LineString",
|
||||
"coordinates": [
|
||||
[102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"prop0": "value0",
|
||||
"prop1": 0.0
|
||||
}
|
||||
},
|
||||
{ "type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Polygon",
|
||||
"coordinates": [
|
||||
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0],
|
||||
[100.0, 1.0], [100.0, 0.0] ]
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"prop0": "value0",
|
||||
"prop1": {"this": "that"}
|
||||
}
|
||||
}
|
||||
]
|
||||
})";
|
||||
|
||||
json::parser_callback_t cb = [&](int, json::parse_event_t event, json & parsed)
|
||||
{
|
||||
// skip uninteresting events
|
||||
if (event == json::parse_event_t::value and !parsed.is_primitive())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (event)
|
||||
{
|
||||
case json::parse_event_t::key:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
case json::parse_event_t::value:
|
||||
{
|
||||
return false;
|
||||
}
|
||||
case json::parse_event_t::object_start:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
case json::parse_event_t::object_end:
|
||||
{
|
||||
return false;
|
||||
}
|
||||
case json::parse_event_t::array_start:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
case json::parse_event_t::array_end:
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
auto j = json::parse(geojsonExample, cb, true);
|
||||
CHECK(j == json());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue