From 3e804a4a090120c19c800ea5e568d0c339724cd9 Mon Sep 17 00:00:00 2001 From: Zack Date: Wed, 26 Jun 2024 06:57:57 -0700 Subject: [PATCH] ValidFileName returns error --- src/utils/utils.go | 24 ++++++++++-------------- src/utils/utils_test.go | 11 ++++++----- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/utils/utils.go b/src/utils/utils.go index f05e24d1..ad0b9c37 100644 --- a/src/utils/utils.go +++ b/src/utils/utils.go @@ -571,20 +571,16 @@ func UnzipDirectory(destination string, source string) error { // ValidFileName checks if a filename is valid // by making sure it has no invisible characters -func ValidFileName(fname string) bool { - clean1 := strings.Map(func(r rune) rune { - if unicode.IsGraphic(r) { - return r +func ValidFileName(fname string) (err error) { + for _, r := range fname { + if !unicode.IsGraphic(r) { + err = fmt.Errorf("non-graphical unicode: %x U+%d in '%s'", string(r), r, fname) + return } - return -1 - }, fname) - - clean2 := strings.Map(func(r rune) rune { - if unicode.IsPrint(r) { - return r + if !unicode.IsPrint(r) { + err = fmt.Errorf("non-printable unicode: %x U+%d in '%s'", string(r), r, fname) + return } - return -1 - }, fname) - - return (fname == clean1) && (fname == clean2) + } + return } diff --git a/src/utils/utils_test.go b/src/utils/utils_test.go index 4deb0494..9d2fefd6 100644 --- a/src/utils/utils_test.go +++ b/src/utils/utils_test.go @@ -252,12 +252,13 @@ func TestIsLocalIP(t *testing.T) { func TestValidFileName(t *testing.T) { // contains regular characters - assert.True(t, ValidFileName("中文.csl")) + assert.Nil(t, ValidFileName("中文.csl")) // contains regular characters - assert.True(t, ValidFileName("[something].csl")) + assert.Nil(t, ValidFileName("[something].csl")) // contains regular characters - assert.True(t, ValidFileName("[(something)].csl")) - assert.True(t, ValidFileName("_index_slash_ssl.html")) + assert.Nil(t, ValidFileName("[(something)].csl")) // contains invisible character - assert.False(t, ValidFileName("D中文.cslouglas​")) + err := ValidFileName("D中文.cslouglas​") + assert.NotNil(t, err) + assert.Equal(t, "non-graphical unicode: e2808b U+8203 in 'D中文.cslouglas​'", err.Error()) }