From 2b7c7b2745648eae6865a7b98741bf0ab944b2f3 Mon Sep 17 00:00:00 2001 From: Daniel Schmidt Date: Tue, 6 Feb 2024 13:35:54 +0100 Subject: [PATCH] fix panic when import id is empty string We can only detect this during evaluation since the import id is an hcl expression. Fixes #33505 --- .../terraform/context_plan_import_test.go | 24 +++++++++++++++++++ internal/terraform/eval_import.go | 9 +++++++ 2 files changed, 33 insertions(+) diff --git a/internal/terraform/context_plan_import_test.go b/internal/terraform/context_plan_import_test.go index 7c7a16528a..0fd93995e9 100644 --- a/internal/terraform/context_plan_import_test.go +++ b/internal/terraform/context_plan_import_test.go @@ -598,6 +598,30 @@ func TestContext2Plan_importIdInvalidNull(t *testing.T) { } } +func TestContext2Plan_importIdInvalidEmptyString(t *testing.T) { + p := testProvider("test") + m := testModule(t, "import-id-invalid-null") + ctx := testContext2(t, &ContextOpts{ + Providers: map[addrs.Provider]providers.Factory{ + addrs.NewDefaultProvider("test"): testProviderFuncFixed(p), + }, + }) + + _, diags := ctx.Plan(m, states.NewState(), &PlanOpts{ + SetVariables: InputValues{ + "the_id": &InputValue{ + Value: cty.StringVal(""), + }, + }, + }) + if !diags.HasErrors() { + t.Fatal("succeeded; want errors") + } + if got, want := diags.Err().Error(), "The import ID value evaluates to an empty string, please provide a non-empty value."; !strings.Contains(got, want) { + t.Fatalf("wrong error:\ngot: %s\nwant: message containing %q", got, want) + } +} + func TestContext2Plan_importIdInvalidUnknown(t *testing.T) { p := testProvider("test") m := testModule(t, "import-id-invalid-unknown") diff --git a/internal/terraform/eval_import.go b/internal/terraform/eval_import.go index aeebf37f34..0638b7a355 100644 --- a/internal/terraform/eval_import.go +++ b/internal/terraform/eval_import.go @@ -72,6 +72,15 @@ func evaluateImportIdExpression(expr hcl.Expression, ctx EvalContext, keyData in }) } + if importId == "" { + return "", diags.Append(&hcl.Diagnostic{ + Severity: hcl.DiagError, + Summary: "Invalid import id argument", + Detail: "The import ID value evaluates to an empty string, please provide a non-empty value.", + Subject: expr.Range().Ptr(), + }) + } + return importId, diags }