ssh/agent: fix TestMalformedRequests
Use a net.Pipe, rather than setting up a local TCP connection, for testing malformed SSH requests, since we don't need the complex intricacies of a real connection to test this protocol behavior. Fixes golang/go#50161 Change-Id: I5e46c42041ddd03b06725469216b82b801990e64 Reviewed-on: https://go-review.googlesource.com/c/crypto/+/371874 Reviewed-by: Bryan Mills <bcmills@google.com> Trust: Roland Shoemaker <roland@golang.org> Run-TryBot: Roland Shoemaker <roland@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
+13
-32
@@ -16,7 +16,6 @@ import (
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -204,44 +203,26 @@ func testAgentInterface(t *testing.T, agent ExtendedAgent, key interface{}, cert
|
||||
|
||||
func TestMalformedRequests(t *testing.T) {
|
||||
keyringAgent := NewKeyring()
|
||||
listener, err := netListener()
|
||||
if err != nil {
|
||||
t.Fatalf("netListener: %v", err)
|
||||
}
|
||||
defer listener.Close()
|
||||
|
||||
testCase := func(t *testing.T, requestBytes []byte, wantServerErr bool) {
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(1)
|
||||
c, s := net.Pipe()
|
||||
defer c.Close()
|
||||
defer s.Close()
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
c, err := listener.Accept()
|
||||
_, err := c.Write(requestBytes)
|
||||
if err != nil {
|
||||
t.Errorf("listener.Accept: %v", err)
|
||||
return
|
||||
}
|
||||
defer c.Close()
|
||||
|
||||
err = ServeAgent(keyringAgent, c)
|
||||
if err == nil {
|
||||
t.Error("ServeAgent should have returned an error to malformed input")
|
||||
} else {
|
||||
if (err != io.EOF) != wantServerErr {
|
||||
t.Errorf("ServeAgent returned expected error: %v", err)
|
||||
}
|
||||
t.Errorf("Unexpected error writing raw bytes on connection: %v", err)
|
||||
}
|
||||
c.Close()
|
||||
}()
|
||||
|
||||
c, err := net.Dial("tcp", listener.Addr().String())
|
||||
if err != nil {
|
||||
t.Fatalf("net.Dial: %v", err)
|
||||
err := ServeAgent(keyringAgent, s)
|
||||
if err == nil {
|
||||
t.Error("ServeAgent should have returned an error to malformed input")
|
||||
} else {
|
||||
if (err != io.EOF) != wantServerErr {
|
||||
t.Errorf("ServeAgent returned expected error: %v", err)
|
||||
}
|
||||
}
|
||||
_, err = c.Write(requestBytes)
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error writing raw bytes on connection: %v", err)
|
||||
}
|
||||
c.Close()
|
||||
wg.Wait()
|
||||
}
|
||||
|
||||
var testCases = []struct {
|
||||
|
||||
Reference in New Issue
Block a user