diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2019-02-03 14:48:17 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2019-02-03 14:48:17 +0100 |
| commit | 24c1272cf4397614fb7ea5502bba9258e6a8f972 (patch) | |
| tree | d6d3579c439869fb0740dec37844e1cd34c84e56 /test | |
| parent | b30ed5cba50688cea9ac2af90855177f84efea5a (diff) | |
| download | PROJ-24c1272cf4397614fb7ea5502bba9258e6a8f972.tar.gz PROJ-24c1272cf4397614fb7ea5502bba9258e6a8f972.zip | |
WKT1 export: avoid division by zero. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=12854. Credit to OSS Fuzz
Diffstat (limited to 'test')
| -rw-r--r-- | test/unit/test_io.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp index 157614b4..69ef9073 100644 --- a/test/unit/test_io.cpp +++ b/test/unit/test_io.cpp @@ -8965,3 +8965,61 @@ TEST(wkt_export, precision) { WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), wkt); } + +// --------------------------------------------------------------------------- + +// Avoid division by zero + +TEST(wkt_export, invalid_linear_unit) { + auto wkt = "PROJCS[\"WGS 84 / UTM zone 31N\",\n" + " GEOGCS[\"WGS 84\",\n" + " DATUM[\"WGS_1984\",\n" + " SPHEROID[\"WGS 84\",6378137,298.257223563]],\n" + " PRIMEM[\"Greenwich\",0],\n" + " UNIT[\"degree\",0.0174532925199433]],\n" + " PROJECTION[\"Transverse_Mercator\"],\n" + " PARAMETER[\"latitude_of_origin\",0],\n" + " PARAMETER[\"central_meridian\",3],\n" + " PARAMETER[\"scale_factor\",0.9996],\n" + " PARAMETER[\"false_easting\",500000],\n" + " PARAMETER[\"false_northing\",0],\n" + " UNIT[\"foo\",0]]"; + + auto obj = WKTParser().createFromWKT(wkt); + auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); + ASSERT_TRUE(crs != nullptr); + + EXPECT_THROW( + crs->exportToWKT( + WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), + FormattingException); +} + +// --------------------------------------------------------------------------- + +// Avoid division by zero + +TEST(wkt_export, invalid_angular_unit) { + auto wkt = "PROJCS[\"WGS 84 / UTM zone 31N\",\n" + " GEOGCS[\"WGS 84\",\n" + " DATUM[\"WGS_1984\",\n" + " SPHEROID[\"WGS 84\",6378137,298.257223563]],\n" + " PRIMEM[\"Greenwich\",0],\n" + " UNIT[\"foo\",0]],\n" + " PROJECTION[\"Transverse_Mercator\"],\n" + " PARAMETER[\"latitude_of_origin\",0],\n" + " PARAMETER[\"central_meridian\",3],\n" + " PARAMETER[\"scale_factor\",0.9996],\n" + " PARAMETER[\"false_easting\",500000],\n" + " PARAMETER[\"false_northing\",0],\n" + " UNIT[\"meter\",1]]"; + + auto obj = WKTParser().createFromWKT(wkt); + auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); + ASSERT_TRUE(crs != nullptr); + + EXPECT_THROW( + crs->exportToWKT( + WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), + FormattingException); +} |
