13111: Port "rename a to a/b/c" fix from 11377b3b.
[arvados.git] / sdk / go / arvados / fs_base.go
index a3df1684cc90a7fd77d32dd3579c81ced7ced3b6..419be7ffb1ef621ab1db359b62832f6d22842948 100644 (file)
@@ -444,6 +444,11 @@ func (fs *fileSystem) Rename(oldname, newname string) error {
                        err = os.ErrNotExist
                        return nil
                }
+               if locked[oldinode] {
+                       // oldinode cannot become a descendant of itself.
+                       err = ErrInvalidArgument
+                       return oldinode
+               }
                accepted := newdirf.inode.Child(newname, func(existing inode) inode {
                        if existing != nil && existing.IsDir() {
                                err = ErrIsDirectory