diff --git a/src/anbox/android/intent.cpp b/src/anbox/android/intent.cpp index 4f5e65966a8afde8f50e5cf6706620cef0784de1..1b7b0e3effcbf54a2e3611460e8695e4b2076140 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 a628f8f0d79b11ffd2035edddc769a52c47c54d0..57f2add2ef7a2c5699b2ed55f31b9ed697d0f1f3 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 1d8aa82a458a2475c8fae63820b004a9c5ada885..3e0f8851a5282bf45bc2afa242a3f12b90011bc3 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 41692fa956b9fb8c2ed0650caaf3a34a8673bcf1..ca1390852155c3f93d5e6ce511b36dcdbac110c6 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 0000000000000000000000000000000000000000..9753aa8b63f7a4c1487806e46aef4405d856da2b --- /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 0000000000000000000000000000000000000000..395a69dd0593e0ee7a4bb7979f418483739ee2e9 --- /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()); +}