From 81113de9d1c787a66f0e1fecb141e2b8936d45e9 Mon Sep 17 00:00:00 2001 From: Alexander Shalamov Date: Thu, 15 Aug 2019 23:01:51 +0300 Subject: [core] Check type of a convertible value when constructing legacy filter --- src/mbgl/style/conversion/filter.cpp | 7 ++++++- test/style/filter.test.cpp | 7 +++++++ 2 files changed, 13 insertions(+), 1 deletion(-) 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(true)}; } + if (!isArray(values) || arrayLength(values) == 0) { + error.message = "filter value must be a non empty array"; + return nullopt; + } + optional 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(*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 result = conversion::convert(conversion::Convertible(&value), error); + EXPECT_FALSE(result); +} -- cgit v1.2.1