diff options
Diffstat (limited to 'vendor')
| -rw-r--r-- | vendor/github.com/abema/go-mp4/box_info.go | 6 | ||||
| -rw-r--r-- | vendor/github.com/abema/go-mp4/box_types_etsi_ts_102_366.go | 36 | ||||
| -rw-r--r-- | vendor/github.com/abema/go-mp4/box_types_iso14496_12.go | 6 | ||||
| -rw-r--r-- | vendor/github.com/abema/go-mp4/marshaller.go | 36 | ||||
| -rw-r--r-- | vendor/modules.txt | 2 | 
5 files changed, 78 insertions, 8 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 diff --git a/vendor/modules.txt b/vendor/modules.txt index aba19f24a..40ecdb295 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -77,7 +77,7 @@ github.com/DmitriyVTitov/size  ## explicit; go 1.19  github.com/KimMachineGun/automemlimit  github.com/KimMachineGun/automemlimit/memlimit -# github.com/abema/go-mp4 v1.0.0 +# github.com/abema/go-mp4 v1.1.1  ## explicit; go 1.14  github.com/abema/go-mp4  github.com/abema/go-mp4/internal/bitio  | 
