Skip to content

Commit

Permalink
Merge pull request #49 from chabad360/patch-2
Browse files Browse the repository at this point in the history
Fix panic if blobLen is less than 0 + other errors
  • Loading branch information
hypebeast committed Apr 8, 2021
2 parents 64c08a1 + 7abd548 commit 3287e18
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 1 deletion.
10 changes: 9 additions & 1 deletion osc/osc.go
Original file line number Diff line number Diff line change
Expand Up @@ -721,6 +721,10 @@ func readArguments(msg *Message, reader *bufio.Reader, start *int) error {
}
*start += n

if len(typetags) == 0 {
return nil
}

// If the typetag doesn't start with ',', it's not valid
if typetags[0] != ',' {
return fmt.Errorf("unsupported type tag string %s", typetags)
Expand Down Expand Up @@ -790,7 +794,7 @@ func readArguments(msg *Message, reader *bufio.Reader, start *int) error {
return nil
}
*start += 8
msg.Append(NewTimetagFromTimetag(tt))
msg.Append(*NewTimetagFromTimetag(tt))

case 'N': // nil
msg.Append(nil)
Expand Down Expand Up @@ -913,6 +917,10 @@ func readBlob(reader *bufio.Reader) ([]byte, int, error) {
}
n := 4 + int(blobLen)

if blobLen < 1 || blobLen > int32(reader.Buffered()) {
return nil, 0, fmt.Errorf("readBlob: invalid blob length %d", blobLen)
}

// Read the data
blob := make([]byte, blobLen)
if _, err := reader.Read(blob); err != nil {
Expand Down
28 changes: 28 additions & 0 deletions osc/osc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,34 @@ func TestReadTimeout(t *testing.T) {
wg.Wait()
}

func TestReadBlob(t *testing.T) {
for _, tt := range []struct {
name string
args []byte
want []byte
want1 int
wantErr bool
}{
{"negative value", []byte{255, 255, 255, 255}, nil, 0, true},
{"large value", []byte{0, 1, 17, 112}, nil, 0, true},
{"regular value", []byte{0, 0, 0, 1, 10, 0, 0, 0}, []byte{10}, 8, false},
} {
t.Run(tt.name, func(t *testing.T) {
got, got1, err := readBlob(bufio.NewReader(bytes.NewBuffer(tt.args)))
if (err != nil) != tt.wantErr {
t.Errorf("readBlob() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("readBlob() got = %v, want %v", got, tt.want)
}
if got1 != tt.want1 {
t.Errorf("readBlob() got1 = %v, want %v", got1, tt.want1)
}
})
}
}

func TestReadPaddedString(t *testing.T) {
for _, tt := range []struct {
buf []byte // buffer
Expand Down

0 comments on commit 3287e18

Please sign in to comment.