pw_containers: Check that FlatMap it is not end() before dereferencing

This bug results in asan errors when looking up keys that are larger
than the max key in the flat map.

Change-Id: Iad88f0138ff33b8b6f2ab6b10692ed7170d4fdfa
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/97801
Commit-Queue: Trinity Lundgren <trinit@google.com>
Reviewed-by: Wyatt Hepler <hepler@google.com>
diff --git a/pw_containers/flat_map_test.cc b/pw_containers/flat_map_test.cc
index 51cf005..bd236bd 100644
--- a/pw_containers/flat_map_test.cc
+++ b/pw_containers/flat_map_test.cc
@@ -178,4 +178,13 @@
   EXPECT_EQ(too_short.begin()->first, 0);
 }
 
+TEST(FlatMap, DontDereferenceEnd) {
+  constexpr FlatMap<int, const char*, 2> unsorted_array({{
+      {2, "hello"},
+      {1, "goodbye"},
+  }});
+
+  EXPECT_EQ(unsorted_array.contains(3), false);
+}
+
 }  // namespace pw::containers
diff --git a/pw_containers/public/pw_containers/flat_map.h b/pw_containers/public/pw_containers/flat_map.h
index b4c2ab5..9df709f 100644
--- a/pw_containers/public/pw_containers/flat_map.h
+++ b/pw_containers/public/pw_containers/flat_map.h
@@ -73,7 +73,10 @@
     }
 
     const_iterator it = lower_bound(key);
-    return key == it->first ? it : end();
+    if (it == end() || it->first != key) {
+      return end();
+    }
+    return it;
   }
 
   constexpr const_iterator lower_bound(const key_type& key) const {