From 0b8cc1ca3c21290d62cf0dfdabdad10b832a3dab Mon Sep 17 00:00:00 2001 From: Siddhartha Singh Date: Wed, 6 May 2026 08:36:39 +0530 Subject: [PATCH] fix: resolve infinite recursion in Provisioner.Class(), Type(), and Description() The Provisioner struct in the envprov package had three methods (Class, Type, Description) that called themselves unconditionally, causing a stack overflow crash whenever invoked. Replace recursive self-calls with correct static return values: - Class() returns default (matches the class checked in Match()) - Type() returns environment (matches the type checked in Match()) - Description() returns empty string (consistent with envVarResourceTracker) Add unit tests to verify the methods return expected values and prevent future regressions. Fixes #481 Signed-off-by: Siddhartha Singh --- internal/provisioners/envprov/envprov.go | 6 +++--- internal/provisioners/envprov/envprov_test.go | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/internal/provisioners/envprov/envprov.go b/internal/provisioners/envprov/envprov.go index 0b494259..191e771c 100644 --- a/internal/provisioners/envprov/envprov.go +++ b/internal/provisioners/envprov/envprov.go @@ -154,11 +154,11 @@ func (e *envVarResourceTracker) Type() string { } func (p *Provisioner) Class() string { - return p.Class() + return "default" } func (p *Provisioner) Type() string { - return p.Type() + return "environment" } func (p *Provisioner) Outputs() []string { @@ -178,7 +178,7 @@ func (e *envVarResourceTracker) Params() []string { } func (p *Provisioner) Description() string { - return p.Description() + return "" } var _ provisioners.Provisioner = (*Provisioner)(nil) diff --git a/internal/provisioners/envprov/envprov_test.go b/internal/provisioners/envprov/envprov_test.go index 3e8bc942..4c4ddca6 100644 --- a/internal/provisioners/envprov/envprov_test.go +++ b/internal/provisioners/envprov/envprov_test.go @@ -27,6 +27,18 @@ import ( func TestProvisioner(t *testing.T) { p := new(Provisioner) + t.Run("class returns default", func(t *testing.T) { + assert.Equal(t, "default", p.Class()) + }) + + t.Run("type returns environment", func(t *testing.T) { + assert.Equal(t, "environment", p.Type()) + }) + + t.Run("description returns empty string", func(t *testing.T) { + assert.Equal(t, "", p.Description()) + }) + t.Run("test match", func(t *testing.T) { assert.True(t, p.Match("environment.default#w.r")) assert.False(t, p.Match("environment.default#thing"))