From c3a8499133a5fccab77eb6fcb0de258c8b43b65f Mon Sep 17 00:00:00 2001 From: Albertin Loic Date: Tue, 13 Oct 2020 12:09:41 +0200 Subject: [PATCH] Fix nil pointers if a workflow can't be found --- deployments/workflows.go | 9 +++++++-- rest/dep_workflow.go | 7 ++++++- tasks/workflow/builder/builder.go | 4 ++++ tasks/workflow/step.go | 4 ++++ 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/deployments/workflows.go b/deployments/workflows.go index 5a1e01c6a..192f48cca 100644 --- a/deployments/workflows.go +++ b/deployments/workflows.go @@ -16,11 +16,12 @@ package deployments import ( "context" + "path" + "strings" + "github.com/ystia/yorc/v4/log" "github.com/ystia/yorc/v4/storage" "github.com/ystia/yorc/v4/storage/types" - "path" - "strings" "github.com/pkg/errors" @@ -127,6 +128,10 @@ func ResolveWorkflowOutputs(ctx context.Context, deploymentID, workflowName stri return nil, err } + if wf == nil { + return nil, errors.Errorf("Can't resolve outputs of workflow %q in deployment %q, workflow definition not found", workflowName, deploymentID) + } + outputs := make(map[string]*TOSCAValue) for outputName, outputDef := range wf.Outputs { dataType := getTypeFromParamDefinition(ctx, &outputDef) diff --git a/rest/dep_workflow.go b/rest/dep_workflow.go index c097acb5b..24aa21871 100644 --- a/rest/dep_workflow.go +++ b/rest/dep_workflow.go @@ -120,7 +120,9 @@ func (s *Server) newWorkflowHandler(w http.ResponseWriter, r *http.Request) { if err != nil { log.Panic(err) } - + if wf == nil { + log.Panic(errors.Errorf("Can't check inputs of workflow %q in deployment %q, workflow definition not found", workflowName, deploymentID)) + } for inputName, def := range wf.Inputs { // A property is considered as required by default, unless def.Required // is set to false @@ -205,5 +207,8 @@ func (s *Server) getWorkflowHandler(w http.ResponseWriter, r *http.Request) { if err != nil { log.Panic(err) } + if wf == nil { + log.Panic(errors.Errorf("Can't retrieve workflow %q in deployment %q, workflow definition not found", workflowName, deploymentID)) + } encodeJSONResponse(w, r, Workflow{Name: workflowName, Workflow: *wf}) } diff --git a/tasks/workflow/builder/builder.go b/tasks/workflow/builder/builder.go index 9fca34b4e..9751097b8 100644 --- a/tasks/workflow/builder/builder.go +++ b/tasks/workflow/builder/builder.go @@ -37,6 +37,10 @@ func BuildWorkFlow(ctx context.Context, deploymentID, wfName string) (map[string return nil, err } + if wf == nil { + return nil, errors.Errorf("Can't build workflow %q in deployment %q, workflow definition not found", wfName, deploymentID) + } + if wf.Steps == nil || len(wf.Steps) == 0 { return nil, deployments.NewInconsistentDeploymentError(deploymentID) } diff --git a/tasks/workflow/step.go b/tasks/workflow/step.go index ac4a0222d..f521d4dfe 100644 --- a/tasks/workflow/step.go +++ b/tasks/workflow/step.go @@ -405,6 +405,10 @@ func (s *step) getActivityInputParameters(ctx context.Context, activity builder. return nil, err } + if wf == nil { + return nil, errors.Errorf("Can't retrieve inputs for an activity of workflow %q in deployment %q, workflow definition not found", workflowName, deploymentID) + } + for inputName, propDef := range wf.Inputs { if _, ok := result[inputName]; ok {