Skip to content

Commit d7776a8

Browse files
authored
Don't panic decoding unknown header types on eventstream (#3355)
1 parent 5754024 commit d7776a8

File tree

3 files changed

+16
-2
lines changed

3 files changed

+16
-2
lines changed

aws/protocol/eventstream/debug.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,6 @@ func valueFromType(typ valueType, val any) (Value, error) {
139139
copy(tv[:], v)
140140
return tv, err
141141
default:
142-
panic(fmt.Sprintf("unknown type, %s, %T", typ.String(), val))
142+
return nil, fmt.Errorf("unable to decode unknown type, %s, %T", typ.String(), val)
143143
}
144144
}

aws/protocol/eventstream/header.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ func decodeHeaderValue(r io.Reader) (Value, error) {
151151
err = tv.decode(r)
152152
v = tv
153153
default:
154-
panic(fmt.Sprintf("unknown value type %d", raw.Type))
154+
return nil, fmt.Errorf("unable to decode header of unknown value type %d", raw.Type)
155155
}
156156

157157
// Error could be EOF, let caller deal with it

aws/protocol/eventstream/header_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package eventstream
22

33
import (
4+
"bytes"
45
"reflect"
56
"testing"
67
"time"
@@ -64,3 +65,16 @@ func TestHeaders_Del(t *testing.T) {
6465
t.Errorf("expect %v headers, got %v", e, a)
6566
}
6667
}
68+
69+
func TestHeaders_UnknownType(t *testing.T) {
70+
buf := bytes.NewBuffer(nil)
71+
buf.WriteByte(3) // header name length
72+
buf.WriteString("foo") // header name
73+
buf.WriteByte(0xFF) // unknown value type
74+
75+
_, err := decodeHeaders(buf)
76+
// This shouldn't panic and should return an error
77+
if err == nil {
78+
t.Fatal("expect error for unknown header value type, got none")
79+
}
80+
}

0 commit comments

Comments
 (0)