summaryrefslogtreecommitdiffstats
path: root/init/init_parser.cpp
diff options
context:
space:
mode:
authorTom Cherry <tomcherry@google.com>2015-04-13 13:07:04 -0700
committerTom Cherry <tomcherry@google.com>2015-04-13 13:37:20 -0700
commitae392cf609536e3d57ffcfefec82064347f0259e (patch)
tree58145cb07391258aad7238734d4d13b87ce413d4 /init/init_parser.cpp
parent7746546b89bf2da44eb058a4053dd4505d00d824 (diff)
downloadsystem_core-ae392cf609536e3d57ffcfefec82064347f0259e.zip
system_core-ae392cf609536e3d57ffcfefec82064347f0259e.tar.gz
system_core-ae392cf609536e3d57ffcfefec82064347f0259e.tar.bz2
Fix memory leak in parse_action
Change-Id: I3ed1da5674ae0b4ac50c1925e4f63af7f1748483
Diffstat (limited to 'init/init_parser.cpp')
-rw-r--r--init/init_parser.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/init/init_parser.cpp b/init/init_parser.cpp
index af935d7..ff31093 100644
--- a/init/init_parser.cpp
+++ b/init/init_parser.cpp
@@ -946,7 +946,14 @@ static void *parse_action(struct parse_state *state, int nargs, char **args)
for (i = 1; i < nargs; i++) {
if (!(i % 2)) {
if (strcmp(args[i], "&&")) {
+ struct listnode *node;
+ struct listnode *node2;
parse_error(state, "& is the only symbol allowed to concatenate actions\n");
+ list_for_each_safe(node, node2, &act->triggers) {
+ struct trigger *trigger = node_to_item(node, struct trigger, nlist);
+ free(trigger);
+ }
+ free(act);
return 0;
} else
continue;