Skip to content

Commit

Permalink
mp3: Only look for supported mp3 sync headers
Browse files Browse the repository at this point in the history
  • Loading branch information
wader committed Sep 12, 2021
1 parent da386ea commit 4344b62
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 9 deletions.
8 changes: 5 additions & 3 deletions format/mp3/mp3.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,11 @@ func mp3Decode(d *decode.D, in interface{}) interface{} {
d.FieldArrayFn("frames", func(d *decode.D) {
for d.NotEnd() {
startFindSync := d.Pos()
syncLen, _, err := d.TryPeekFind(16, 8, func(v uint64) bool {
return v&0b1111_1111_1110_0000 == 0b1111_1111_1110_0000
}, d.BitsLeft())
syncLen, _, err := d.TryPeekFind(16, 8, -1, func(v uint64) bool {
return (v&0b1111_1111_1110_0000 == 0b1111_1111_1110_0000 && // sync header
v&0b0000_0000_0001_1000 != 0b0000_0000_0000_1000 && // not reserved mpeg version
v&0b0000_0000_0000_0110 == 0b0000_0000_0000_0010) // layer 3
})
if err != nil {
break
}
Expand Down
4 changes: 2 additions & 2 deletions format/mpeg/annexb.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import (
)

func annexBFindStartCode(d *decode.D) (int64, int64, error) {
offset, v, err := d.TryPeekFind(32, 8, func(v uint64) bool {
offset, v, err := d.TryPeekFind(32, 8, -1, func(v uint64) bool {
return annexBDecodeStartCodeLen(v) > 0
}, d.BitsLeft())
})
return offset, annexBDecodeStartCodeLen(v), err
}

Expand Down
6 changes: 3 additions & 3 deletions pkg/decode/decode.go
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ func (d *D) PeekBytes(nBytes int) []byte {
}

func (d *D) PeekFind(nBits int, seekBits int64, fn func(v uint64) bool, maxLen int64) (int64, uint64) {
peekBits, v, err := d.TryPeekFind(nBits, seekBits, fn, maxLen)
peekBits, v, err := d.TryPeekFind(nBits, seekBits, maxLen, fn)
if err != nil {
panic(IOError{Err: err, Op: "PeekFind", Size: 0, Pos: d.Pos()})
}
Expand All @@ -313,9 +313,9 @@ func (d *D) TryHasBytes(hb []byte) bool {

// PeekFindByte number of bytes to next v
func (d *D) PeekFindByte(findV uint8, maxLen int64) int64 {
peekBits, _, err := d.TryPeekFind(8, 8, func(v uint64) bool {
peekBits, _, err := d.TryPeekFind(8, 8, maxLen*8, func(v uint64) bool {
return uint64(findV) == v
}, maxLen*8)
})
if err != nil {
panic(IOError{Err: err, Op: "PeekFindByte", Size: 0, Pos: d.Pos()})

Expand Down
2 changes: 1 addition & 1 deletion pkg/decode/decode_readers.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ func (d *D) Bits(nBits int) (uint64, error) {
return n, nil
}

func (d *D) TryPeekFind(nBits int, seekBits int64, fn func(v uint64) bool, maxLen int64) (int64, uint64, error) {
func (d *D) TryPeekFind(nBits int, seekBits int64, maxLen int64, fn func(v uint64) bool) (int64, uint64, error) {
start, err := d.bitBuf.SeekBits(0, io.SeekCurrent)
if err != nil {
return 0, 0, err
Expand Down

0 comments on commit 4344b62

Please sign in to comment.