diff --git a/configs/module.go b/configs/module.go index bc517078d..76878b4aa 100644 --- a/configs/module.go +++ b/configs/module.go @@ -289,7 +289,15 @@ func (m *Module) appendFile(file *File) hcl.Diagnostics { if r.ProviderConfigRef != nil { r.Provider = m.ProviderForLocalConfig(r.ProviderConfigAddr()) } else { - r.Provider = m.ImpliedProviderForUnqualifiedType(r.Addr().ImpliedProvider()) + // an invalid resource name (for e.g. "null resource" instead of + // "null_resource") can cause a panic down the line in addrs: + // https://github.com/hashicorp/terraform/issues/25560 + implied, err := addrs.ParseProviderPart(r.Addr().ImpliedProvider()) + if err == nil { + r.Provider = m.ImpliedProviderForUnqualifiedType(implied) + } + // We don't return a diagnostic because the invalid resource name + // will already have been caught. } } @@ -310,7 +318,15 @@ func (m *Module) appendFile(file *File) hcl.Diagnostics { if r.ProviderConfigRef != nil { r.Provider = m.ProviderForLocalConfig(r.ProviderConfigAddr()) } else { - r.Provider = m.ImpliedProviderForUnqualifiedType(r.Addr().ImpliedProvider()) + // an invalid data source name (for e.g. "null resource" instead of + // "null_resource") can cause a panic down the line in addrs: + // https://github.com/hashicorp/terraform/issues/25560 + implied, err := addrs.ParseProviderPart(r.Addr().ImpliedProvider()) + if err == nil { + r.Provider = m.ImpliedProviderForUnqualifiedType(implied) + } + // We don't return a diagnostic because the invalid resource name + // will already have been caught. } } diff --git a/configs/testdata/invalid-files/resource-name-invalid.tf b/configs/testdata/invalid-files/resource-name-invalid.tf new file mode 100644 index 000000000..bfd9fff5e --- /dev/null +++ b/configs/testdata/invalid-files/resource-name-invalid.tf @@ -0,0 +1,7 @@ +resource "test resource" "test_resource" { + +} + +data "test resource" "test_resource" { + +}