Fix segmentation fault in aapt2

When passing a single iterator to std::vector::eraase, only element at
that iterator is removed. If no elements are filtered, std::remove_if()
returns the end iterator, attempting to erase() the end iterator can
cause segmentation fault. This bug causes signing test to fail.
https://atp.googleplex.com/tests/asit/ota/signing?tabId=test_run

Test: aapt2
PRODUCT/app/CalculatorGooglePrebuilt/CalculatorGooglePrebuilt.apk

Bug: 175789289
Bug: 178554651

Change-Id: I813055238bef2dcbdf76172a00b3f44ae940b759
(cherry picked from commit b88ccf80aa884df039cd13c5a31f3e08065d487e)
diff --git a/tools/aapt2/dump/DumpManifest.cpp b/tools/aapt2/dump/DumpManifest.cpp
index 61ba09b..f2c6b15 100644
--- a/tools/aapt2/dump/DumpManifest.cpp
+++ b/tools/aapt2/dump/DumpManifest.cpp
@@ -135,7 +135,8 @@
     template <typename Predicate>
     void Filter(Predicate&& func) {
       children_.erase(std::remove_if(children_.begin(), children_.end(),
-                                     [&](const auto& e) { return func(e.get()); }));
+                                     [&](const auto& e) { return func(e.get()); }),
+                      children_.end());
     }
 
     /** Retrieves the list of children of the element. */