From fd3d4d4efbd73c0fd83e0bb5f5a85c1c4259b173 Mon Sep 17 00:00:00 2001 From: Lorenzo Blasa Date: Fri, 4 Feb 2022 07:04:12 -0800 Subject: [PATCH] Catch receiver errors Summary: This change adds a safety net for receivers that may throw an exception on invocation. Without this change, the exception is logged but not shown in Flipper. Reviewed By: nikoant Differential Revision: D34001224 fbshipit-source-id: ca07d3dd006b277e306ecbc1c033845929a83f4c --- xplat/Flipper/FlipperConnectionImpl.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/xplat/Flipper/FlipperConnectionImpl.h b/xplat/Flipper/FlipperConnectionImpl.h index b2f6c50dd..e9578480f 100644 --- a/xplat/Flipper/FlipperConnectionImpl.h +++ b/xplat/Flipper/FlipperConnectionImpl.h @@ -33,7 +33,15 @@ class FlipperConnectionImpl : public FlipperConnection { responder->error(folly::dynamic::object("message", errorMessage)); return; } - receivers_.at(method)(params, responder); + try { + receivers_.at(method)(params, responder); + } catch (const std::exception& ex) { + std::string errorMessage = "Receiver " + method + " failed with error. "; + std::string reason = ex.what(); + errorMessage += "Error: '" + reason + "'."; + log("Error: " + errorMessage); + responder->error(folly::dynamic::object("message", errorMessage)); + } } void send(const std::string& method, const folly::dynamic& params) override {