diff --git a/src/anbox/android/intent.cpp b/src/anbox/android/intent.cpp index 4f5e659..1b7b0e3 100644 --- a/src/anbox/android/intent.cpp +++ b/src/anbox/android/intent.cpp @@ -21,6 +21,12 @@ namespace anbox { namespace android { +bool Intent::valid() const { + // At the moment we only support component+package for intents + // (see android/service/android_api_skeleton.cpp for more details) + return !(component.empty() && package.empty()); +} + std::ostream &operator<<(std::ostream &out, const Intent &intent) { out << "["; if (!intent.action.empty()) diff --git a/src/anbox/android/intent.h b/src/anbox/android/intent.h index a628f8f..57f2add 100644 --- a/src/anbox/android/intent.h +++ b/src/anbox/android/intent.h @@ -31,6 +31,8 @@ struct Intent { std::string package; std::string component; std::vector categories; + + bool valid() const; }; std::ostream &operator<<(std::ostream &out, const Intent &intent); diff --git a/src/anbox/cmds/launch.cpp b/src/anbox/cmds/launch.cpp index 1d8aa82..3e0f885 100644 --- a/src/anbox/cmds/launch.cpp +++ b/src/anbox/cmds/launch.cpp @@ -79,6 +79,11 @@ anbox::cmds::Launch::Launch() stack_)); action([this](const cli::Command::Context&) { + if (!intent_.valid()) { + ERROR("The intent you provided is invalid. Please provide a correct launch intent."); + return EXIT_FAILURE; + } + auto trap = core::posix::trap_signals_for_process({core::posix::Signal::sig_term, core::posix::Signal::sig_int}); trap->signal_raised().connect([trap](const core::posix::Signal& signal) { INFO("Signal %i received. Good night.", static_cast(signal)); diff --git a/tests/anbox/CMakeLists.txt b/tests/anbox/CMakeLists.txt index 41692fa..ca13908 100644 --- a/tests/anbox/CMakeLists.txt +++ b/tests/anbox/CMakeLists.txt @@ -1,3 +1,4 @@ +add_subdirectory(android) add_subdirectory(support) add_subdirectory(common) add_subdirectory(graphics) diff --git a/tests/anbox/android/CMakeLists.txt b/tests/anbox/android/CMakeLists.txt new file mode 100644 index 0000000..9753aa8 --- /dev/null +++ b/tests/anbox/android/CMakeLists.txt @@ -0,0 +1 @@ +ANBOX_ADD_TEST(intent_tests intent_tests.cpp) diff --git a/tests/anbox/android/intent_tests.cpp b/tests/anbox/android/intent_tests.cpp new file mode 100644 index 0000000..395a69d --- /dev/null +++ b/tests/anbox/android/intent_tests.cpp @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2017 Simon Fels + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3, as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranties of + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + * + */ + +#include "anbox/android/intent.h" + +#include + +TEST(Intent, IsValid) { + anbox::android::Intent intent; + ASSERT_FALSE(intent.valid()); + intent.component = "foo"; + ASSERT_TRUE(intent.valid()); + intent.package = "bla"; + ASSERT_TRUE(intent.valid()); + intent.component = ""; + ASSERT_TRUE(intent.valid()); +}