From 16c11d7bf9dd382b4e0ada196893ec3026c01cf2 Mon Sep 17 00:00:00 2001 From: Jesse Hallam Date: Wed, 5 Jun 2019 17:51:59 -0400 Subject: [PATCH] Issue 11030: fix HasFile to avoid false positives for no filename (#11060) --- config/database_test.go | 13 +++++++++++++ config/file.go | 4 ++++ config/file_test.go | 14 +++++++++++++- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/config/database_test.go b/config/database_test.go index 0f090e0af1..2793f76d96 100644 --- a/config/database_test.go +++ b/config/database_test.go @@ -611,6 +611,19 @@ func TestDatabaseHasFile(t *testing.T) { require.NoError(t, err) require.True(t, has) }) + + t.Run("has non-existent empty string", func(t *testing.T) { + _, tearDown := setupConfigDatabase(t, minimalConfig, nil) + defer tearDown() + + ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *mainHelper.Settings.DriverName, *mainHelper.Settings.DataSource)) + require.NoError(t, err) + defer ds.Close() + + has, err := ds.HasFile("") + require.NoError(t, err) + require.False(t, has) + }) } func TestDatabaseRemoveFile(t *testing.T) { diff --git a/config/file.go b/config/file.go index 69aa99d63b..ba134449fb 100644 --- a/config/file.go +++ b/config/file.go @@ -184,6 +184,10 @@ func (fs *FileStore) SetFile(name string, data []byte) error { // HasFile returns true if the given file was previously persisted. func (fs *FileStore) HasFile(name string) (bool, error) { + if name == "" { + return false, nil + } + resolvedPath := filepath.Join(filepath.Dir(fs.path), name) _, err := os.Stat(resolvedPath) diff --git a/config/file_test.go b/config/file_test.go index 4eaf5a2de0..12b9ac619d 100644 --- a/config/file_test.go +++ b/config/file_test.go @@ -688,7 +688,6 @@ func TestFileSetFile(t *testing.T) { } func TestFileHasFile(t *testing.T) { - t.Run("has non-existent", func(t *testing.T) { path, tearDown := setupConfigFile(t, minimalConfig) defer tearDown() @@ -740,6 +739,19 @@ func TestFileHasFile(t *testing.T) { require.NoError(t, err) require.True(t, has) }) + + t.Run("has empty string", func(t *testing.T) { + path, tearDown := setupConfigFile(t, minimalConfig) + defer tearDown() + + fs, err := config.NewFileStore(path, true) + require.NoError(t, err) + defer fs.Close() + + has, err := fs.HasFile("") + require.NoError(t, err) + require.False(t, has) + }) } func TestFileRemoveFile(t *testing.T) {