diff --git a/weed/server/postgres/server.go b/weed/server/postgres/server.go index 1ac4d8b3e..51c9fe1e3 100644 --- a/weed/server/postgres/server.go +++ b/weed/server/postgres/server.go @@ -388,7 +388,13 @@ func (s *PostgreSQLServer) handleStartup(session *PostgreSQLSession) error { return fmt.Errorf("failed to read message length during startup: %v", err) } - msgLength := binary.BigEndian.Uint32(length) - 4 + msgTotalLen := binary.BigEndian.Uint32(length) + // Prevent unsigned underflow and OOM by checking total message length first + if msgTotalLen < 8 { + return fmt.Errorf("startup message too short: %d bytes", msgTotalLen) + } + + msgLength := msgTotalLen - 4 if msgLength > 10000 { // Reasonable limit for startup messages return fmt.Errorf("startup message too large: %d bytes", msgLength) }