From ba29c43bb23de83c7715271e0830cb9f00e9e1c1 Mon Sep 17 00:00:00 2001 From: Jeff Halter <868228+jhalter@users.noreply.github.com> Date: Wed, 8 Jun 2022 20:41:57 -0700 Subject: Fix folder upload hang with resource forks --- hotline/server.go | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'hotline/server.go') diff --git a/hotline/server.go b/hotline/server.go index 33888e0..1a6d163 100644 --- a/hotline/server.go +++ b/hotline/server.go @@ -978,15 +978,26 @@ func (s *Server) handleFileTransfer(conn io.ReadWriteCloser) error { } fileSize := make([]byte, 4) - readBuffer := make([]byte, 1024) for i := 0; i < fileTransfer.ItemCount(); i++ { - // TODO: fix potential short read with io.ReadFull - _, err := conn.Read(readBuffer) - if err != nil { + s.Stats.UploadCounter += 1 + + var fu folderUpload + if _, err := io.ReadFull(conn, fu.DataSize[:]); err != nil { + return err + } + + if _, err := io.ReadFull(conn, fu.IsFolder[:]); err != nil { + return err + } + if _, err := io.ReadFull(conn, fu.PathItemCount[:]); err != nil { + return err + } + fu.FileNamePath = make([]byte, binary.BigEndian.Uint16(fu.DataSize[:])-4) + + if _, err := io.ReadFull(conn, fu.FileNamePath); err != nil { return err } - fu := readFolderUpload(readBuffer) s.Logger.Infow( "Folder upload continued", @@ -1073,7 +1084,7 @@ func (s *Server) handleFileTransfer(conn io.ReadWriteCloser) error { } case dlFldrActionSendFile: - if _, err := conn.Read(fileSize); err != nil { + if _, err := io.ReadFull(conn, fileSize); err != nil { return err } -- cgit