summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Shalamov <alexander.shalamov@mapbox.com>2019-08-15 23:01:51 +0300
committerAlexander Shalamov <alexander.shalamov@mapbox.com>2019-08-16 00:19:30 +0300
commit5f477e310b286d1bb8c5d238376d45ec58aa3fc4 (patch)
tree20d2e16d9fa5c70811ee89e01262a5d4304ed84a
parent8e1bd18eae73ffbe14aa9297a039e2431d40bd36 (diff)
downloadqtlocation-mapboxgl-upstream/node-release.tar.gz
[core] Check type of a convertible value when constructing legacy filterupstream/node-release
-rw-r--r--src/mbgl/style/conversion/filter.cpp7
-rw-r--r--test/style/filter.test.cpp7
2 files changed, 13 insertions, 1 deletions
diff --git a/src/mbgl/style/conversion/filter.cpp b/src/mbgl/style/conversion/filter.cpp
index 4e8d9c48e5..1b77985322 100644
--- a/src/mbgl/style/conversion/filter.cpp
+++ b/src/mbgl/style/conversion/filter.cpp
@@ -195,11 +195,16 @@ ParseResult convertLegacyFilter(const Convertible& values, Error& error) {
return {std::make_unique<Literal>(true)};
}
+ if (!isArray(values) || arrayLength(values) == 0) {
+ error.message = "filter value must be a non empty array";
+ return nullopt;
+ }
+
optional<std::string> op = toString(arrayMember(values, 0));
if (!op) {
error.message = "filter operator must be a string";
- return {};
+ return nullopt;
} else if (arrayLength(values) <= 1) {
return {std::make_unique<Literal>(*op != "any")};
} else {
diff --git a/test/style/filter.test.cpp b/test/style/filter.test.cpp
index 40219108bb..f3f5b52141 100644
--- a/test/style/filter.test.cpp
+++ b/test/style/filter.test.cpp
@@ -255,3 +255,10 @@ TEST(Filter, Internal) {
TEST(Filter, Short) {
filter(R"(["==", ["id"], "foo"])");
}
+
+TEST(Filter, LegacyExpressionInvalidType) {
+ const JSValue value("string");
+ conversion::Error error;
+ optional<Filter> result = conversion::convert<Filter>(conversion::Convertible(&value), error);
+ EXPECT_FALSE(result);
+}