diff --git a/service/internal/executor/arguments.go b/service/internal/executor/arguments.go index e563bd9..b2372a3 100644 --- a/service/internal/executor/arguments.go +++ b/service/internal/executor/arguments.go @@ -43,6 +43,10 @@ func parseCommandForReplacements(shellCommand string, values map[string]string, } func parseActionExec(values map[string]string, action *config.Action, entity *entities.Entity) ([]string, error) { + if action == nil { + return nil, fmt.Errorf("action is nil") + } + for _, arg := range action.Arguments { argName := arg.Name argValue := values[argName] diff --git a/service/internal/executor/executor.go b/service/internal/executor/executor.go index d7254c7..fa98b77 100644 --- a/service/internal/executor/executor.go +++ b/service/internal/executor/executor.go @@ -435,6 +435,13 @@ func stepParseArgs(req *ExecutionRequest) bool { mangleInvalidArgumentValues(req) + if req.Binding == nil || req.Binding.Action == nil { + err = fmt.Errorf("cannot parse arguments: Binding or Action is nil") + req.logEntry.Output = err.Error() + log.Warn(err.Error()) + return false + } + if len(req.Binding.Action.Exec) > 0 { req.useDirectExec = true req.execArgs, err = parseActionExec(req.Arguments, req.Binding.Action, req.Binding.Entity) @@ -585,6 +592,12 @@ func stepExec(req *ExecutionRequest) bool { cmd = wrapCommandInShell(ctx, req.finalParsedCommand) } + if cmd == nil { + req.logEntry.Output = "Cannot execute: no command arguments provided" + log.Warn("Cannot execute: no command arguments provided") + return false + } + cmd.Stdout = streamer cmd.Stderr = streamer cmd.Env = buildEnv(req.Arguments)