diff --git a/internal/sftpd/handler.go b/internal/sftpd/handler.go index 2dfdab05..c551da1b 100644 --- a/internal/sftpd/handler.go +++ b/internal/sftpd/handler.go @@ -353,23 +353,25 @@ func (c *Connection) handleSFTPSetstat(request *sftp.Request) error { attrs := common.StatAttributes{ Flags: 0, } - if request.AttrFlags().Permissions { - attrs.Flags |= common.StatAttrPerms - attrs.Mode = request.Attributes().FileMode() - } - if request.AttrFlags().UidGid { - attrs.Flags |= common.StatAttrUIDGID - attrs.UID = int(request.Attributes().UID) - attrs.GID = int(request.Attributes().GID) - } - if request.AttrFlags().Acmodtime { - attrs.Flags |= common.StatAttrTimes - attrs.Atime = time.Unix(int64(request.Attributes().Atime), 0) - attrs.Mtime = time.Unix(int64(request.Attributes().Mtime), 0) - } - if request.AttrFlags().Size { - attrs.Flags |= common.StatAttrSize - attrs.Size = int64(request.Attributes().Size) + if request.Attributes() != nil { + if request.AttrFlags().Permissions { + attrs.Flags |= common.StatAttrPerms + attrs.Mode = request.Attributes().FileMode() + } + if request.AttrFlags().UidGid { + attrs.Flags |= common.StatAttrUIDGID + attrs.UID = int(request.Attributes().UID) + attrs.GID = int(request.Attributes().GID) + } + if request.AttrFlags().Acmodtime { + attrs.Flags |= common.StatAttrTimes + attrs.Atime = time.Unix(int64(request.Attributes().Atime), 0) + attrs.Mtime = time.Unix(int64(request.Attributes().Mtime), 0) + } + if request.AttrFlags().Size { + attrs.Flags |= common.StatAttrSize + attrs.Size = int64(request.Attributes().Size) + } } return c.SetStat(request.Filepath, &attrs)