Skip to content

Commit 4d3f4d9

Browse files
JackOfMostTradeshanwen
authored andcommitted
ssh/agent: Fix error returned from agent responses that are too big.
Make sure a meaningful error is returned when the SSH agent client receives a response that is too big. Change-Id: Ied68b2c559a61dede2f3112c4c8143babd385f48 GitHub-Last-Rev: ad65e1b GitHub-Pull-Request: #61 Reviewed-on: https://go-review.googlesource.com/c/143058 Reviewed-by: Han-Wen Nienhuys <[email protected]> Run-TryBot: Han-Wen Nienhuys <[email protected]> TryBot-Result: Gobot Gobot <[email protected]>
1 parent bc7917b commit 4d3f4d9

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

ssh/agent/client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ func (c *client) callRaw(req []byte) (reply []byte, err error) {
348348
}
349349
respSize := binary.BigEndian.Uint32(respSizeBuf[:])
350350
if respSize > maxAgentResponseBytes {
351-
return nil, clientErr(err)
351+
return nil, clientErr(errors.New("response too large"))
352352
}
353353

354354
buf := make([]byte, respSize)

ssh/agent/client_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,35 @@ func netPipe() (net.Conn, net.Conn, error) {
241241
return c1, c2, nil
242242
}
243243

244+
func TestServerResponseTooLarge(t *testing.T) {
245+
a, b, err := netPipe()
246+
if err != nil {
247+
t.Fatalf("netPipe: %v", err)
248+
}
249+
250+
defer a.Close()
251+
defer b.Close()
252+
253+
var response identitiesAnswerAgentMsg
254+
response.NumKeys = 1
255+
response.Keys = make([]byte, maxAgentResponseBytes+1)
256+
257+
agent := NewClient(a)
258+
go func() {
259+
n, _ := b.Write(ssh.Marshal(response))
260+
if n < 4 {
261+
t.Fatalf("At least 4 bytes (the response size) should have been successfully written: %d < 4", n)
262+
}
263+
}()
264+
_, err = agent.List()
265+
if err == nil {
266+
t.Fatal("Did not get error result")
267+
}
268+
if err.Error() != "agent: client error: response too large" {
269+
t.Fatal("Did not get expected error result")
270+
}
271+
}
272+
244273
func TestAuth(t *testing.T) {
245274
agent, _, cleanup := startOpenSSHAgent(t)
246275
defer cleanup()

0 commit comments

Comments
 (0)