diff options
Diffstat (limited to 'vendor/github.com')
4 files changed, 77 insertions, 7 deletions
diff --git a/vendor/github.com/abema/go-mp4/box_info.go b/vendor/github.com/abema/go-mp4/box_info.go index b5c587fd9..402b418ef 100644 --- a/vendor/github.com/abema/go-mp4/box_info.go +++ b/vendor/github.com/abema/go-mp4/box_info.go @@ -3,6 +3,7 @@ package mp4 import ( "bytes" "encoding/binary" + "fmt" "io" "math" ) @@ -128,7 +129,6 @@ func ReadBoxInfo(r io.ReadSeeker) (*BoxInfo, error) { if _, err := bi.SeekToPayload(r); err != nil { return nil, err } - } else if bi.Size == 1 { // read more 8 bytes buf.Reset() @@ -139,6 +139,10 @@ func ReadBoxInfo(r io.ReadSeeker) (*BoxInfo, error) { bi.Size = binary.BigEndian.Uint64(buf.Bytes()) } + if bi.Size == 0 { + return nil, fmt.Errorf("invalid size") + } + return bi, nil } diff --git a/vendor/github.com/abema/go-mp4/box_types_etsi_ts_102_366.go b/vendor/github.com/abema/go-mp4/box_types_etsi_ts_102_366.go new file mode 100644 index 000000000..7436e1833 --- /dev/null +++ b/vendor/github.com/abema/go-mp4/box_types_etsi_ts_102_366.go @@ -0,0 +1,36 @@ +package mp4 + +/*************************** ac-3 ****************************/ + +// https://www.etsi.org/deliver/etsi_ts/102300_102399/102366/01.04.01_60/ts_102366v010401p.pdf + +func BoxTypeAC3() BoxType { return StrToBoxType("ac-3") } + +func init() { + AddAnyTypeBoxDef(&AudioSampleEntry{}, BoxTypeAC3()) +} + +/*************************** dac3 ****************************/ + +// https://www.etsi.org/deliver/etsi_ts/102300_102399/102366/01.04.01_60/ts_102366v010401p.pdf + +func BoxTypeDAC3() BoxType { return StrToBoxType("dac3") } + +func init() { + AddBoxDef(&Dac3{}) +} + +type Dac3 struct { + Box + Fscod uint8 `mp4:"0,size=2"` + Bsid uint8 `mp4:"1,size=5"` + Bsmod uint8 `mp4:"2,size=3"` + Acmod uint8 `mp4:"3,size=3"` + LfeOn uint8 `mp4:"4,size=1"` + BitRateCode uint8 `mp4:"5,size=5"` + Reserved uint8 `mp4:"6,size=5,const=0"` +} + +func (Dac3) GetType() BoxType { + return BoxTypeDAC3() +} diff --git a/vendor/github.com/abema/go-mp4/box_types_iso14496_12.go b/vendor/github.com/abema/go-mp4/box_types_iso14496_12.go index f87fb467b..017fd918d 100644 --- a/vendor/github.com/abema/go-mp4/box_types_iso14496_12.go +++ b/vendor/github.com/abema/go-mp4/box_types_iso14496_12.go @@ -638,6 +638,10 @@ func (hdlr *Hdlr) OnReadName(r bitio.ReadSeeker, leftBits uint64, ctx Context) ( return 0, true, nil } + if !readerHasSize(r, size) { + return 0, false, fmt.Errorf("not enough bits") + } + buf := make([]byte, size) if _, err := io.ReadFull(r, buf); err != nil { return 0, false, err @@ -1197,6 +1201,7 @@ func (*Saiz) GetType() BoxType { /*********************** SampleEntry *************************/ +func BoxTypeMp4v() BoxType { return StrToBoxType("mp4v") } func BoxTypeAvc1() BoxType { return StrToBoxType("avc1") } func BoxTypeEncv() BoxType { return StrToBoxType("encv") } func BoxTypeHev1() BoxType { return StrToBoxType("hev1") } @@ -1207,6 +1212,7 @@ func BoxTypeAvcC() BoxType { return StrToBoxType("avcC") } func BoxTypePasp() BoxType { return StrToBoxType("pasp") } func init() { + AddAnyTypeBoxDef(&VisualSampleEntry{}, BoxTypeMp4v()) AddAnyTypeBoxDef(&VisualSampleEntry{}, BoxTypeAvc1()) AddAnyTypeBoxDef(&VisualSampleEntry{}, BoxTypeEncv()) AddAnyTypeBoxDef(&VisualSampleEntry{}, BoxTypeHev1()) diff --git a/vendor/github.com/abema/go-mp4/marshaller.go b/vendor/github.com/abema/go-mp4/marshaller.go index 18ff79a0c..ff6c64c32 100644 --- a/vendor/github.com/abema/go-mp4/marshaller.go +++ b/vendor/github.com/abema/go-mp4/marshaller.go @@ -17,6 +17,29 @@ const ( var ErrUnsupportedBoxVersion = errors.New("unsupported box version") +func readerHasSize(reader bitio.ReadSeeker, size uint64) bool { + pre, err := reader.Seek(0, io.SeekCurrent) + if err != nil { + return false + } + + end, err := reader.Seek(0, io.SeekEnd) + if err != nil { + return false + } + + if uint64(end-pre) < size { + return false + } + + _, err = reader.Seek(pre, io.SeekStart) + if err != nil { + return false + } + + return true +} + type marshaller struct { writer bitio.Writer wbits uint64 @@ -417,12 +440,13 @@ func (u *unmarshaller) unmarshalSlice(v reflect.Value, fi *fieldInstance) error } } - if length > math.MaxInt32 { - return fmt.Errorf("out of memory: requestedSize=%d", length) - } - - if fi.size != 0 && fi.size%8 == 0 && u.rbits%8 == 0 && elemType.Kind() == reflect.Uint8 && fi.size == 8 { + if u.rbits%8 == 0 && elemType.Kind() == reflect.Uint8 && fi.size == 8 { totalSize := length * uint64(fi.size) / 8 + + if !readerHasSize(u.reader, totalSize) { + return fmt.Errorf("not enough bits") + } + buf := bytes.NewBuffer(make([]byte, 0, totalSize)) if _, err := io.CopyN(buf, u.reader, int64(totalSize)); err != nil { return err @@ -431,7 +455,7 @@ func (u *unmarshaller) unmarshalSlice(v reflect.Value, fi *fieldInstance) error u.rbits += uint64(totalSize) * 8 } else { - slice = reflect.MakeSlice(v.Type(), 0, int(length)) + slice = reflect.MakeSlice(v.Type(), 0, 0) for i := 0; ; i++ { if fi.length != LengthUnlimited && uint(i) >= fi.length { break |