diff --git a/cmd/helm/lint.go b/cmd/helm/lint.go index f529f8ce5..29eea1a88 100644 --- a/cmd/helm/lint.go +++ b/cmd/helm/lint.go @@ -149,7 +149,11 @@ func lintChart(path string, vals []byte, namespace string, strict bool) (support return linter, err } - base := strings.Split(filepath.Base(path), "-")[0] + lastHyphenIndex := strings.LastIndex(filepath.Base(path), "-") + if lastHyphenIndex <= 0 { + return linter, fmt.Errorf("unable to parse chart archive %q, missing '-'", filepath.Base(path)) + } + base := filepath.Base(path)[:lastHyphenIndex] chartPath = filepath.Join(tempDir, base) } else { chartPath = path diff --git a/cmd/helm/lint_test.go b/cmd/helm/lint_test.go index e52bdc056..7f045153c 100644 --- a/cmd/helm/lint_test.go +++ b/cmd/helm/lint_test.go @@ -21,11 +21,13 @@ import ( ) var ( - values = []byte{} - namespace = "testNamespace" - strict = false - archivedChartPath = "testdata/testcharts/compressedchart-0.1.0.tgz" - chartDirPath = "testdata/testcharts/decompressedchart/" + values = []byte{} + namespace = "testNamespace" + strict = false + archivedChartPath = "testdata/testcharts/compressedchart-0.1.0.tgz" + archivedChartPathWithHyphens = "testdata/testcharts/compressedchart-with-hyphens-0.1.0.tgz" + invalidArchivedChartPath = "testdata/testcharts/invalidcompressedchart0.1.0.tgz" + chartDirPath = "testdata/testcharts/decompressedchart/" ) func TestLintChart(t *testing.T) { @@ -37,4 +39,11 @@ func TestLintChart(t *testing.T) { t.Errorf("%s", err) } + if _, err := lintChart(archivedChartPathWithHyphens, values, namespace, strict); err != nil { + t.Errorf("%s", err) + } + + if _, err := lintChart(invalidArchivedChartPath, values, namespace, strict); err == nil { + t.Errorf("Expected a chart parsing error") + } } diff --git a/cmd/helm/testdata/testcharts/compressedchart-with-hyphens-0.1.0.tgz b/cmd/helm/testdata/testcharts/compressedchart-with-hyphens-0.1.0.tgz new file mode 100644 index 000000000..379210a92 Binary files /dev/null and b/cmd/helm/testdata/testcharts/compressedchart-with-hyphens-0.1.0.tgz differ