2
0

Merge pull request #19 from gitstashpop/backend-unexpected-eof

Extend handling of unexpected EOF to the backend
This commit is contained in:
Jack Christensen
2021-07-06 20:08:14 -05:00
committed by GitHub
2 changed files with 25 additions and 4 deletions
+3 -3
View File
@@ -67,7 +67,7 @@ func (b *Backend) ReceiveStartupMessage() (FrontendMessage, error) {
buf, err = b.cr.Next(msgSize) buf, err = b.cr.Next(msgSize)
if err != nil { if err != nil {
return nil, err return nil, translateEOFtoErrUnexpectedEOF(err)
} }
code := binary.BigEndian.Uint32(buf) code := binary.BigEndian.Uint32(buf)
@@ -107,7 +107,7 @@ func (b *Backend) Receive() (FrontendMessage, error) {
if !b.partialMsg { if !b.partialMsg {
header, err := b.cr.Next(5) header, err := b.cr.Next(5)
if err != nil { if err != nil {
return nil, err return nil, translateEOFtoErrUnexpectedEOF(err)
} }
b.msgType = header[0] b.msgType = header[0]
@@ -161,7 +161,7 @@ func (b *Backend) Receive() (FrontendMessage, error) {
msgBody, err := b.cr.Next(b.bodyLen) msgBody, err := b.cr.Next(b.bodyLen)
if err != nil { if err != nil {
return nil, err return nil, translateEOFtoErrUnexpectedEOF(err)
} }
b.partialMsg = false b.partialMsg = false
+22 -1
View File
@@ -1,10 +1,12 @@
package pgproto3_test package pgproto3_test
import ( import (
"io"
"testing" "testing"
"github.com/jackc/pgio" "github.com/jackc/pgio"
"github.com/jackc/pgproto3/v2" "github.com/jackc/pgproto3/v2"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
@@ -35,6 +37,26 @@ func TestBackendReceiveInterrupted(t *testing.T) {
} }
} }
func TestBackendReceiveUnexpectedEOF(t *testing.T) {
t.Parallel()
server := &interruptReader{}
server.push([]byte{'Q', 0, 0, 0, 6})
backend := pgproto3.NewBackend(pgproto3.NewChunkReader(server), nil)
// Receive regular msg
msg, err := backend.Receive()
assert.Nil(t, msg)
assert.Equal(t, io.ErrUnexpectedEOF, err)
// Receive FE msg
server.push([]byte{'F', 0, 0, 0, 6})
msg, err = backend.ReceiveStartupMessage()
assert.Nil(t, msg)
assert.Equal(t, io.ErrUnexpectedEOF, err)
}
func TestStartupMessage(t *testing.T) { func TestStartupMessage(t *testing.T) {
t.Parallel() t.Parallel()
@@ -93,5 +115,4 @@ func TestStartupMessage(t *testing.T) {
}) })
} }
}) })
} }