go.crypto/ssh: fix panic unmarshalling channelOpenFailureMsg
I introduced this problem in change set 33 when I redefined RejectionReason from a uint32 to an int. I have added a test to verify the message can be marshaled correctly. This was a bit hard to track down as the recover in clientConn mainLoop would catch the panic and shutdown the connection. We probably shouldn't be using panic inside marshal/unmarshal, at least not without a way to let the user know why the recover logic tripped. R=agl, kardianos, gustav.paul CC=golang-dev https://golang.org/cl/6210063
This commit is contained in:
+1
-1
@@ -61,7 +61,7 @@ func (c ChannelRequest) Error() string {
|
||||
|
||||
// RejectionReason is an enumeration used when rejecting channel creation
|
||||
// requests. See RFC 4254, section 5.1.
|
||||
type RejectionReason int
|
||||
type RejectionReason uint32
|
||||
|
||||
const (
|
||||
Prohibited RejectionReason = iota + 1
|
||||
|
||||
@@ -40,6 +40,7 @@ var messageTypes = []interface{}{
|
||||
&userAuthRequestMsg{},
|
||||
&channelOpenMsg{},
|
||||
&channelOpenConfirmMsg{},
|
||||
&channelOpenFailureMsg{},
|
||||
&channelRequestMsg{},
|
||||
&channelRequestSuccessMsg{},
|
||||
}
|
||||
@@ -124,6 +125,13 @@ func (*kexDHInitMsg) Generate(rand *rand.Rand, size int) reflect.Value {
|
||||
return reflect.ValueOf(dhi)
|
||||
}
|
||||
|
||||
// TODO(dfc) maybe this can be removed in the future if testing/quick can handle
|
||||
// derived basic types.
|
||||
func (RejectionReason) Generate(rand *rand.Rand, size int) reflect.Value {
|
||||
m := RejectionReason(Prohibited)
|
||||
return reflect.ValueOf(m)
|
||||
}
|
||||
|
||||
var (
|
||||
_kexInitMsg = new(kexInitMsg).Generate(rand.New(rand.NewSource(0)), 10).Elem().Interface()
|
||||
_kexDHInitMsg = new(kexDHInitMsg).Generate(rand.New(rand.NewSource(0)), 10).Elem().Interface()
|
||||
|
||||
Reference in New Issue
Block a user