Loading init/action_parser.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -16,11 +16,14 @@ #include "action_parser.h" #include <ctype.h> #include <android-base/properties.h> #include <android-base/strings.h> #if defined(__ANDROID__) #include "property_service.h" #include "selinux.h" #else #include "host_init_stubs.h" #endif Loading Loading @@ -77,6 +80,17 @@ Result<void> ParsePropertyTrigger(const std::string& trigger, Subcontext* subcon return {}; } Result<void> ValidateEventTrigger(const std::string& event_trigger) { if (SelinuxGetVendorAndroidVersion() >= __ANDROID_API_R__) { for (const char& c : event_trigger) { if (c != '_' && c != '-' && !std::isalnum(c)) { return Error() << "Illegal character '" << c << "' in '" << event_trigger << "'"; } } } return {}; } Result<void> ParseTriggers(const std::vector<std::string>& args, Subcontext* subcontext, std::string* event_trigger, std::map<std::string, std::string>* property_triggers) { Loading @@ -103,6 +117,9 @@ Result<void> ParseTriggers(const std::vector<std::string>& args, Subcontext* sub if (!event_trigger->empty()) { return Error() << "multiple event triggers are not allowed"; } if (auto result = ValidateEventTrigger(args[i]); !result) { return result; } *event_trigger = args[i]; } Loading init/init_test.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -93,6 +93,26 @@ pass_test EXPECT_TRUE(expect_true); } TEST(init, WrongEventTrigger) { std::string init_script = R"init( on boot: pass_test )init"; TemporaryFile tf; ASSERT_TRUE(tf.fd != -1); ASSERT_TRUE(android::base::WriteStringToFd(init_script, tf.fd)); ActionManager am; Parser parser; parser.AddSectionParser("on", std::make_unique<ActionParser>(&am, nullptr)); ASSERT_TRUE(parser.ParseConfig(tf.path)); ASSERT_EQ(1u, parser.parse_error_count()); } TEST(init, EventTriggerOrder) { std::string init_script = R"init( Loading Loading
init/action_parser.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -16,11 +16,14 @@ #include "action_parser.h" #include <ctype.h> #include <android-base/properties.h> #include <android-base/strings.h> #if defined(__ANDROID__) #include "property_service.h" #include "selinux.h" #else #include "host_init_stubs.h" #endif Loading Loading @@ -77,6 +80,17 @@ Result<void> ParsePropertyTrigger(const std::string& trigger, Subcontext* subcon return {}; } Result<void> ValidateEventTrigger(const std::string& event_trigger) { if (SelinuxGetVendorAndroidVersion() >= __ANDROID_API_R__) { for (const char& c : event_trigger) { if (c != '_' && c != '-' && !std::isalnum(c)) { return Error() << "Illegal character '" << c << "' in '" << event_trigger << "'"; } } } return {}; } Result<void> ParseTriggers(const std::vector<std::string>& args, Subcontext* subcontext, std::string* event_trigger, std::map<std::string, std::string>* property_triggers) { Loading @@ -103,6 +117,9 @@ Result<void> ParseTriggers(const std::vector<std::string>& args, Subcontext* sub if (!event_trigger->empty()) { return Error() << "multiple event triggers are not allowed"; } if (auto result = ValidateEventTrigger(args[i]); !result) { return result; } *event_trigger = args[i]; } Loading
init/init_test.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -93,6 +93,26 @@ pass_test EXPECT_TRUE(expect_true); } TEST(init, WrongEventTrigger) { std::string init_script = R"init( on boot: pass_test )init"; TemporaryFile tf; ASSERT_TRUE(tf.fd != -1); ASSERT_TRUE(android::base::WriteStringToFd(init_script, tf.fd)); ActionManager am; Parser parser; parser.AddSectionParser("on", std::make_unique<ActionParser>(&am, nullptr)); ASSERT_TRUE(parser.ParseConfig(tf.path)); ASSERT_EQ(1u, parser.parse_error_count()); } TEST(init, EventTriggerOrder) { std::string init_script = R"init( Loading