diff --git a/licensedb/filer/filer.go b/licensedb/filer/filer.go index 32fbb8f..707368b 100644 --- a/licensedb/filer/filer.go +++ b/licensedb/filer/filer.go @@ -323,9 +323,13 @@ func (filer *zipFiler) ReadDir(path string) ([]File, error) { } result := make([]File, 0, len(node.children)) for name, child := range node.children { + isDir := true + if child.file != nil { + isDir = child.file.FileInfo().IsDir() + } result = append(result, File{ Name: name, - IsDir: child.file.FileInfo().IsDir(), + IsDir: isDir, }) } return result, nil diff --git a/licensedb/filer/filer_test.go b/licensedb/filer/filer_test.go index 2273aff..0db6382 100644 --- a/licensedb/filer/filer_test.go +++ b/licensedb/filer/filer_test.go @@ -79,9 +79,27 @@ func TestZipFiler(t *testing.T) { filer, err := FromZIP("test_data/local.zip") assert.Nil(t, err) testFiler(t, filer) + filer, err = FromZIP("test_data/local2.zip") assert.Nil(t, filer) assert.NotNil(t, err) + + filer, err = FromZIP("test_data/empty_sub_dir.zip") + assert.Nil(t, err) + defer filer.Close() + files, err := filer.ReadDir("") + assert.Nil(t, err) + assert.Len(t, files, 1) + assert.Equal(t, "dir", files[0].Name) + assert.True(t, files[0].IsDir) + files, err = filer.ReadDir("dir") + assert.Nil(t, err) + assert.Len(t, files, 1) + assert.Equal(t, "sub_dir", files[0].Name) + assert.True(t, files[0].IsDir) + files, err = filer.ReadDir("dir/sub_dir") + assert.Nil(t, err) + assert.Len(t, files, 0) } func TestNestedFiler(t *testing.T) { diff --git a/licensedb/filer/test_data/empty_sub_dir.zip b/licensedb/filer/test_data/empty_sub_dir.zip new file mode 100644 index 0000000..2fbad9e Binary files /dev/null and b/licensedb/filer/test_data/empty_sub_dir.zip differ