From f2beed577f5014f84ad53c92a9192b54947bdd58 Mon Sep 17 00:00:00 2001 From: Steven Zou Date: Tue, 31 Mar 2020 00:08:55 +0800 Subject: [PATCH] fix[logger]:update log ID validation logic (#11351) Signed-off-by: Steven Zou --- src/jobservice/logger/getter/file_getter.go | 27 ++++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/jobservice/logger/getter/file_getter.go b/src/jobservice/logger/getter/file_getter.go index 3838964b4..4694aad39 100644 --- a/src/jobservice/logger/getter/file_getter.go +++ b/src/jobservice/logger/getter/file_getter.go @@ -6,6 +6,7 @@ import ( "fmt" "io/ioutil" "path" + "strings" "github.com/goharbor/harbor/src/jobservice/errs" @@ -24,12 +25,8 @@ func NewFileGetter(baseDir string) *FileGetter { // Retrieve implements @Interface.Retrieve func (fg *FileGetter) Retrieve(logID string) ([]byte, error) { - if len(logID) != 24 { - return nil, errors.New("invalid length of log identify") - } - - if _, err := hex.DecodeString(logID); err != nil { - return nil, errors.New("invalid log identify") + if err := isValidLogID(logID); err != nil { + return nil, err } fPath := path.Join(fg.baseDir, fmt.Sprintf("%s.log", logID)) @@ -40,3 +37,21 @@ func (fg *FileGetter) Retrieve(logID string) ([]byte, error) { return ioutil.ReadFile(fPath) } + +func isValidLogID(id string) error { + lid := id + segment := strings.LastIndex(lid, "@") + if segment != -1 { + lid = lid[:segment] + } + + if len(lid) != 24 { + return errors.New("invalid length of log identify") + } + + if _, err := hex.DecodeString(lid); err != nil { + return errors.New("invalid log identify") + } + + return nil +}