@@ -19,12 +19,12 @@ import (
1919 "bytes"
2020 "fmt"
2121 "os"
22- "path/filepath"
2322
2423 "helm.sh/helm/v3/pkg/chart/loader"
2524 "helm.sh/helm/v3/pkg/chartutil"
2625
2726 "github.com/Masterminds/vcs"
27+ securejoin "github.com/cyphar/filepath-securejoin"
2828
2929 "helm.sh/helm/v3/internal/gitutil"
3030)
@@ -60,14 +60,18 @@ func (g *GitGetter) get(href string) (*bytes.Buffer, error) {
6060 if err != nil {
6161 return nil , err
6262 }
63- chartTmpDir := filepath .Join (tmpDir , chartName )
6463
65- if err := os .MkdirAll (chartTmpDir , 0755 ); err != nil {
64+ gitTmpDir , err := securejoin .SecureJoin (tmpDir , chartName )
65+ if err != nil {
66+ return nil , err
67+ }
68+
69+ if err := os .MkdirAll (gitTmpDir , 0755 ); err != nil {
6670 return nil , err
6771 }
6872 defer os .RemoveAll (tmpDir )
6973
70- repo , err := vcs .NewRepo (gitURL .GitRemoteURL .String (), chartTmpDir )
74+ repo , err := vcs .NewRepo (gitURL .GitRemoteURL .String (), gitTmpDir )
7175 if err != nil {
7276 return nil , err
7377 }
@@ -78,7 +82,12 @@ func (g *GitGetter) get(href string) (*bytes.Buffer, error) {
7882 return nil , err
7983 }
8084
81- ch , err := loader .LoadDir (filepath .Join (chartTmpDir , gitURL .PathUnderGitRepository ))
85+ chartDir , err := securejoin .SecureJoin (gitTmpDir , gitURL .PathUnderGitRepository )
86+ if err != nil {
87+ return nil , err
88+ }
89+
90+ ch , err := loader .LoadDir (chartDir )
8291 if err != nil {
8392 return nil , err
8493 }
0 commit comments