From 3d858bee9568c60d6e36fef9aa66e126cd441ab6 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Mon, 19 Jan 2015 14:46:29 -0800 Subject: [PATCH] Guard against bad events in screen module It can happen that the DisplayObserver methods are called without a valid Display object passed. --- atom/browser/api/atom_api_screen.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/atom/browser/api/atom_api_screen.cc b/atom/browser/api/atom_api_screen.cc index 76bf67edfb..6e5dd716d7 100644 --- a/atom/browser/api/atom_api_screen.cc +++ b/atom/browser/api/atom_api_screen.cc @@ -86,13 +86,21 @@ void Screen::OnDisplayAdded(const gfx::Display& new_display) { } void Screen::OnDisplayRemoved(const gfx::Display& old_display) { - displays_.erase(FindById(&displays_, old_display.id())); + auto iter = FindById(&displays_, old_display.id()); + if (iter == displays_.end()) + return; + + displays_.erase(iter); Emit("display-removed", old_display); } void Screen::OnDisplayMetricsChanged(const gfx::Display& display, uint32_t changed_metrics) { - *FindById(&displays_, display.id()) = display; + auto iter = FindById(&displays_, display.id()); + if (iter == displays_.end()) + return; + + *iter = display; Emit("display-metrics-changed", display, MetricsToArray(changed_metrics)); }