aboutsummaryrefslogtreecommitdiff
path: root/src/io.cpp
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2018-12-17 19:30:34 +0100
committerEven Rouault <even.rouault@spatialys.com>2018-12-17 20:01:05 +0100
commit898b8595276779cd8613e0c4b267181a76acecab (patch)
treeff1bfd55bd1919ca28ffb335470d0f901d0de09c /src/io.cpp
parentdcb58eb624f87fad1362bfc593b274f84fa44889 (diff)
downloadPROJ-898b8595276779cd8613e0c4b267181a76acecab.tar.gz
PROJ-898b8595276779cd8613e0c4b267181a76acecab.zip
Add WKT2 grammar validation
Diffstat (limited to 'src/io.cpp')
-rw-r--r--src/io.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/io.cpp b/src/io.cpp
index 79f8ae5e..fe3680fb 100644
--- a/src/io.cpp
+++ b/src/io.cpp
@@ -61,6 +61,7 @@
#include "proj_constants.h"
#include "pj_wkt1_parser.h"
+#include "pj_wkt2_parser.h"
// PROJ include order is sensitive
// clang-format off
@@ -1782,6 +1783,12 @@ UnitOfMeasure WKTParser::Private::buildUnitInSubNode(const WKTNodeNNPtr &node,
return buildUnit(unitNode, UnitOfMeasure::Type::TIME);
}
}
+ {
+ auto &unitNode = nodeP->lookForChild(WKTConstants::TEMPORALQUANTITY);
+ if (!isNull(unitNode)) {
+ return buildUnit(unitNode, UnitOfMeasure::Type::TIME);
+ }
+ }
{
auto &unitNode = nodeP->lookForChild(WKTConstants::PARAMETRICUNIT);
@@ -4366,6 +4373,12 @@ BaseObjectNNPtr WKTParser::createFromWKT(const std::string &wkt) {
if (!errorMsg.empty()) {
d->emitRecoverableAssertion(errorMsg);
}
+ } else if (dialect == WKTGuessedDialect::WKT2_2015 ||
+ dialect == WKTGuessedDialect::WKT2_2018) {
+ auto errorMsg = pj_wkt2_parse(wkt);
+ if (!errorMsg.empty()) {
+ d->emitRecoverableAssertion(errorMsg);
+ }
}
return obj;