From a3cd0ec257212f456a95f1751700dbe906ee2157 Mon Sep 17 00:00:00 2001
From: jackgr <jackgr@google.com>
Date: Wed, 30 Mar 2016 13:01:47 -0700
Subject: [PATCH] Fix chart directory relative path bug

---
 examples/charts/replicatedservice-3.tgz | Bin 2853 -> 0 bytes
 pkg/chart/chart.go                      |  22 +++++++++++++++++-----
 pkg/chart/chart_test.go                 |   9 +++++----
 3 files changed, 22 insertions(+), 9 deletions(-)
 delete mode 100644 examples/charts/replicatedservice-3.tgz

diff --git a/examples/charts/replicatedservice-3.tgz b/examples/charts/replicatedservice-3.tgz
deleted file mode 100644
index ebbcc18025ca3f2c54477a376ab43bc5109a2bb4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2853
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
DN;-N(

diff --git a/pkg/chart/chart.go b/pkg/chart/chart.go
index d36c15f1e..8367bd83a 100644
--- a/pkg/chart/chart.go
+++ b/pkg/chart/chart.go
@@ -220,20 +220,25 @@ func fname(name string) string {
 // If you are just reading the Chart.yaml file, it is substantially more
 // performant to use LoadChartfile.
 func LoadDir(chart string) (*Chart, error) {
-	if fi, err := os.Stat(chart); err != nil {
+	dir, err := filepath.Abs(chart)
+	if err != nil {
+		return nil, fmt.Errorf("%s is not a valid path", chart)
+	}
+
+	if fi, err := os.Stat(dir); err != nil {
 		return nil, err
 	} else if !fi.IsDir() {
-		return nil, fmt.Errorf("Chart %s is not a directory.", chart)
+		return nil, fmt.Errorf("%s is not a directory", chart)
 	}
 
-	cf, err := LoadChartfile(filepath.Join(chart, "Chart.yaml"))
+	cf, err := LoadChartfile(filepath.Join(dir, "Chart.yaml"))
 	if err != nil {
 		return nil, err
 	}
 
 	cl := &dirChart{
 		chartyaml: cf,
-		chartdir:  chart,
+		chartdir:  dir,
 	}
 
 	return &Chart{
@@ -293,9 +298,16 @@ func loadTar(r *tar.Reader) (*tarChart, error) {
 	if err != nil {
 		return nil, err
 	}
+
+	// ioutil.TempDir uses Getenv("TMPDIR"), so there are no guarantees
+	dir, err := filepath.Abs(td)
+	if err != nil {
+		return nil, fmt.Errorf("%s is not a valid path", td)
+	}
+
 	c := &tarChart{
 		chartyaml: &Chartfile{},
-		tmpDir:    td,
+		tmpDir:    dir,
 	}
 
 	firstDir := ""
diff --git a/pkg/chart/chart_test.go b/pkg/chart/chart_test.go
index 6aea61033..e0da71ac6 100644
--- a/pkg/chart/chart_test.go
+++ b/pkg/chart/chart_test.go
@@ -141,18 +141,19 @@ func TestChart(t *testing.T) {
 		t.Errorf("Unexpected chart file name: %s", c.Chartfile().Name)
 	}
 
+	dir := c.Dir()
 	d := c.DocsDir()
-	if d != filepath.Join(testdir, preDocs) {
+	if d != filepath.Join(dir, preDocs) {
 		t.Errorf("Unexpectedly, docs are in %s", d)
 	}
 
 	d = c.TemplatesDir()
-	if d != filepath.Join(testdir, preTemplates) {
+	if d != filepath.Join(dir, preTemplates) {
 		t.Errorf("Unexpectedly, templates are in %s", d)
 	}
 
 	d = c.HooksDir()
-	if d != filepath.Join(testdir, preHooks) {
+	if d != filepath.Join(dir, preHooks) {
 		t.Errorf("Unexpectedly, hooks are in %s", d)
 	}
 
@@ -160,7 +161,7 @@ func TestChart(t *testing.T) {
 	if err != nil {
 		t.Errorf("No icon found in test chart: %s", err)
 	}
-	if i != filepath.Join(testdir, preIcon) {
+	if i != filepath.Join(dir, preIcon) {
 		t.Errorf("Unexpectedly, icon is in %s", i)
 	}
 }
-- 
GitLab