Skip to content

Fixture tester should not access invalid array entries #87

@springmeyer

Description

@springmeyer

The fixture tester is not careful to check that the coordinate arrays it is parsing in this loop:

for (SizeType j = 0; j < document[i].Size(); ++j) {
lr.push_back({ document[i][j][0].GetInt(), document[i][j][1].GetInt() });
}
have both X and Y values. This means that an invalid JSON file like:

[
    [
   [-2500],
     [-2500.20], [-25250000,-2,-2500],
   [-2500.2500],
   [250062500],
   [2500,-2560],[-2500,-2500] ]
]

Will result in bogus values in release mode like:

-2500 0
1717986918 0
-25250000 -2
0 250062500
250062500 2500
2500 -2560
-2500 -2500

^^ generated by doing:

diff --git a/tests/fixture-tester.cpp b/tests/fixture-tester.cpp
index 02036d7..b1dde95 100644
--- a/tests/fixture-tester.cpp
+++ b/tests/fixture-tester.cpp
@@ -103,6 +103,7 @@ mapbox::geometry::polygon<value_type> parse_file(const char* file_path) {
                                      ") is not a valid json array");
         }
         for (SizeType j = 0; j < document[i].Size(); ++j) {
+            std::clog << document[i][j][0].GetInt() << " " << document[i][j][1].GetInt() << "\n";
             lr.push_back({ document[i][j][0].GetInt(), document[i][j][1].GetInt() });
         }
         poly.emplace_back(lr);

And in debug mode rapidjson catches the problem:

Assertion failed: (index < data_.a.size), function operator[], file mason_packages/headers/rapidjson/1.1.0/include/rapidjson/document.h, line 1498.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions