X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/4ea88c89b61931b2f588461d530b4fa7dcf7487d..9f842eecf59f293fd800ece28be2730ff3a39487:/sdk/go/arvados/collection_fs.go diff --git a/sdk/go/arvados/collection_fs.go b/sdk/go/arvados/collection_fs.go index 28629e33b2..d8ee2a2b1c 100644 --- a/sdk/go/arvados/collection_fs.go +++ b/sdk/go/arvados/collection_fs.go @@ -864,7 +864,7 @@ func (dn *dirnode) loadManifest(txt string) error { return fmt.Errorf("line %d: bad locator %q", lineno, token) } - toks := strings.Split(token, ":") + toks := strings.SplitN(token, ":", 3) if len(toks) != 3 { return fmt.Errorf("line %d: bad file segment %q", lineno, token) } @@ -1078,6 +1078,10 @@ func (dn *dirnode) Rename(oldname, newname string) error { if !ok { return os.ErrNotExist } + if locked[oldinode] { + // oldinode cannot become a descendant of itself. + return ErrInvalidArgument + } if existing, ok := newdn.inodes[newname]; ok { // overwriting an existing file or dir if dn, ok := existing.(*dirnode); ok {