From e594176401ee45c52add3eef34f7f5f2e9d227c8 Mon Sep 17 00:00:00 2001 From: John Knox Date: Thu, 28 Feb 2019 05:36:23 -0800 Subject: [PATCH] Handle any exception pointers at top level Summary: If a plugin thows an exception pointer instead of by value, we should capture it and stop the app from crashing. Reviewed By: passy Differential Revision: D14243644 fbshipit-source-id: a2e5dde2b36c430355552e3305634baa5913b703 --- android/src/main/cpp/sonar.cpp | 73 ++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/android/src/main/cpp/sonar.cpp b/android/src/main/cpp/sonar.cpp index 018197045..ac9cefa97 100644 --- a/android/src/main/cpp/sonar.cpp +++ b/android/src/main/cpp/sonar.cpp @@ -198,6 +198,11 @@ class JFlipperPlugin : public jni::JavaClass { } catch (const std::exception& e) { handleException(e); return ""; + } catch (const std::exception* e) { + if (e) { + handleException(*e); + } + return ""; } } @@ -210,6 +215,10 @@ class JFlipperPlugin : public jni::JavaClass { method(self(), JFlipperConnectionImpl::newObjectCxxArgs(conn)); } catch (const std::exception& e) { handleException(e); + } catch (const std::exception* e) { + if (e) { + handleException(*e); + } } } @@ -219,6 +228,10 @@ class JFlipperPlugin : public jni::JavaClass { method(self()); } catch (const std::exception& e) { handleException(e); + } catch (const std::exception* e) { + if (e) { + handleException(*e); + } } } @@ -230,6 +243,11 @@ class JFlipperPlugin : public jni::JavaClass { } catch (const std::exception& e) { handleException(e); return false; + } catch (const std::exception* e) { + if (e) { + handleException(*e); + } + return false; } } }; @@ -245,6 +263,10 @@ class JFlipperStateUpdateListener : public jni::JavaClass { FlipperClient::instance()->start(); } catch (const std::exception& e) { handleException(e); + } catch (const std::exception* e) { + if (e) { + handleException(*e); + } } } @@ -367,6 +405,10 @@ class JFlipperClient : public jni::HybridClass { FlipperClient::instance()->stop(); } catch (const std::exception& e) { handleException(e); + } catch (const std::exception* e) { + if (e) { + handleException(*e); + } } } @@ -377,6 +419,10 @@ class JFlipperClient : public jni::HybridClass { FlipperClient::instance()->addPlugin(wrapper); } catch (const std::exception& e) { handleException(e); + } catch (const std::exception* e) { + if (e) { + handleException(*e); + } } } @@ -386,6 +432,10 @@ class JFlipperClient : public jni::HybridClass { client->removePlugin(client->getPlugin(plugin->identifier())); } catch (const std::exception& e) { handleException(e); + } catch (const std::exception* e) { + if (e) { + handleException(*e); + } } } @@ -397,6 +447,10 @@ class JFlipperClient : public jni::HybridClass { client->setStateListener(mStateListener); } catch (const std::exception& e) { handleException(e); + } catch (const std::exception* e) { + if (e) { + handleException(*e); + } } } @@ -407,6 +461,10 @@ class JFlipperClient : public jni::HybridClass { client->setStateListener(nullptr); } catch (const std::exception& e) { handleException(e); + } catch (const std::exception* e) { + if (e) { + handleException(*e); + } } } @@ -416,6 +474,11 @@ class JFlipperClient : public jni::HybridClass { } catch (const std::exception& e) { handleException(e); return ""; + } catch (const std::exception* e) { + if (e) { + handleException(*e); + } + return ""; } } @@ -442,6 +505,11 @@ class JFlipperClient : public jni::HybridClass { } catch (const std::exception& e) { handleException(e); return nullptr; + } catch (const std::exception* e) { + if (e) { + handleException(*e); + } + return nullptr; } } @@ -457,6 +525,11 @@ class JFlipperClient : public jni::HybridClass { } catch (const std::exception& e) { handleException(e); return nullptr; + } catch (const std::exception* e) { + if (e) { + handleException(*e); + } + return nullptr; } }