aboutsummaryrefslogtreecommitdiff
path: root/hotline
diff options
context:
space:
mode:
authorJeff Halter <868228+jhalter@users.noreply.github.com>2022-05-28 17:37:40 -0700
committerJeff Halter <868228+jhalter@users.noreply.github.com>2022-05-28 17:37:40 -0700
commit2e7c03cf691f453ca2762f44c6945e5b70bc0f51 (patch)
treeb3e00c53672f40c64088ed78a646df5c8d817830 /hotline
parentaebc4d3647b9823ae8cbb57b21b1af83bfd011fb (diff)
Fix race in file upload handling that may cause panic
Diffstat (limited to 'hotline')
-rw-r--r--hotline/server.go20
1 files changed, 12 insertions, 8 deletions
diff --git a/hotline/server.go b/hotline/server.go
index 1da2859..3a58893 100644
--- a/hotline/server.go
+++ b/hotline/server.go
@@ -609,13 +609,14 @@ const dlFldrActionNextFile = 3
func (s *Server) TransferFile(conn net.Conn) error {
defer func() { _ = conn.Close() }()
- buf := make([]byte, 1024)
- if _, err := conn.Read(buf); err != nil {
+ txBuf := make([]byte, 16)
+ _, err := conn.Read(txBuf)
+ if err != nil {
return err
}
var t transfer
- _, err := t.Write(buf[:16])
+ _, err = t.Write(txBuf)
if err != nil {
return err
}
@@ -667,11 +668,16 @@ func (s *Server) TransferFile(conn net.Conn) error {
}
}
case FileUpload:
- if _, err := conn.Read(buf); err != nil {
+ const buffSize = 1460
+
+ uploadBuf := make([]byte, buffSize)
+
+ _, err := conn.Read(uploadBuf)
+ if err != nil {
return err
}
- ffo := ReadFlattenedFileObject(buf)
+ ffo := ReadFlattenedFileObject(uploadBuf)
payloadLen := len(ffo.BinaryMarshal())
fileSize := int(binary.BigEndian.Uint32(ffo.FlatFileDataForkHeader.DataSize))
@@ -691,9 +697,7 @@ func (s *Server) TransferFile(conn net.Conn) error {
defer func() { _ = newFile.Close() }()
- const buffSize = 1024
-
- if _, err := newFile.Write(buf[payloadLen:]); err != nil {
+ if _, err := newFile.Write(uploadBuf[payloadLen:]); err != nil {
return err
}
receivedBytes := buffSize - payloadLen