summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLucas Wojciechowski <lucas@mapbox.com>2018-04-24 13:25:55 -0700
committerAsheem Mamoowala <asheem.mamoowala@mapbox.com>2018-05-09 16:08:50 -0700
commit9c96d8a2f07566567e6bbe06147dbbb591d66492 (patch)
tree2b49185a862806d01608bbc4db59df583bbcd11f
parentd080248f9f9728e25f3f40ba253f64415bc22f7f (diff)
downloadqtlocation-mapboxgl-9c96d8a2f07566567e6bbe06147dbbb591d66492.tar.gz
Ensure `property` is a string in legacy `has` filters
-rw-r--r--src/mbgl/style/conversion/filter.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/mbgl/style/conversion/filter.cpp b/src/mbgl/style/conversion/filter.cpp
index f8bf3d1449..57b3786627 100644
--- a/src/mbgl/style/conversion/filter.cpp
+++ b/src/mbgl/style/conversion/filter.cpp
@@ -124,13 +124,18 @@ std::unique_ptr<expression::Expression> convertLegacyComparisonFilter(const Conv
}
}
-std::unique_ptr<expression::Expression> convertLegacyHasFilter(std::string property, Error& error) {
- if (property == "$type") {
+std::unique_ptr<expression::Expression> convertLegacyHasFilter(const Convertible& values, Error& error) {
+ optional<std::string> property = toString(arrayMember(values, 1));
+
+ if (!property) {
+ error = { "filter property must be a string" };
+ return {};
+ } else if (*property == "$type") {
return std::make_unique<expression::Literal>(true);
- } else if (property == "$id") {
+ } else if (*property == "$id") {
return createExpression("filter-has-id", std::vector<std::unique_ptr<expression::Expression>>(), error);
} else {
- return createExpression("filter-has", std::make_unique<expression::Literal>(property), error);
+ return createExpression("filter-has", std::make_unique<expression::Literal>(*property), error);
}
}
@@ -184,8 +189,8 @@ std::unique_ptr<expression::Expression> convertLegacyFilter(const Convertible& v
*op == "none" ? createExpression("!", createExpression("any", convertLegacyFilterArray(values, error, 1), error), error) :
*op == "in" ? convertLegacyInFilter(values, error) :
*op == "!in" ? createExpression("!", convertLegacyInFilter(values, error), error) :
- *op == "has" ? convertLegacyHasFilter(*toString(arrayMember(values, 1)), error) :
- *op == "!has" ? createExpression("!", convertLegacyHasFilter(*toString(arrayMember(values, 1)), error), error) :
+ *op == "has" ? convertLegacyHasFilter(values, error) :
+ *op == "!has" ? createExpression("!", convertLegacyHasFilter(values, error), error) :
std::make_unique<expression::Literal>(true)
);
}