diff options
author | Lucas Wojciechowski <lucas@mapbox.com> | 2018-04-24 13:25:55 -0700 |
---|---|---|
committer | Asheem Mamoowala <asheem.mamoowala@mapbox.com> | 2018-05-09 16:08:50 -0700 |
commit | 9c96d8a2f07566567e6bbe06147dbbb591d66492 (patch) | |
tree | 2b49185a862806d01608bbc4db59df583bbcd11f | |
parent | d080248f9f9728e25f3f40ba253f64415bc22f7f (diff) | |
download | qtlocation-mapboxgl-9c96d8a2f07566567e6bbe06147dbbb591d66492.tar.gz |
Ensure `property` is a string in legacy `has` filters
-rw-r--r-- | src/mbgl/style/conversion/filter.cpp | 17 |
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) ); } |