11package mp4io
22
33import (
4- "log "
4+ "errors "
55 "time"
66
77 "github.com/deepch/vdk/utils/bits/pio"
@@ -306,6 +306,10 @@ func (self *Movie) Unmarshal(b []byte, offset int) (n int, err error) {
306306 err = parseErr ("trak" , n + offset , err )
307307 return
308308 }
309+ if len (self .Tracks ) > 100 {
310+ err = errors .New ("too many tracks" )
311+ return
312+ }
309313 self .Tracks = append (self .Tracks , atom )
310314 }
311315 default :
@@ -315,6 +319,10 @@ func (self *Movie) Unmarshal(b []byte, offset int) (n int, err error) {
315319 err = parseErr ("" , n + offset , err )
316320 return
317321 }
322+ if len (self .Unknowns ) > 100 {
323+ err = errors .New ("too many unknowns" )
324+ return
325+ }
318326 self .Unknowns = append (self .Unknowns , atom )
319327 }
320328 }
@@ -573,11 +581,6 @@ func (self *Track) Unmarshal(b []byte, offset int) (n int, err error) {
573581 for n + 8 < len (b ) {
574582 tag := Tag (pio .U32BE (b [n + 4 :]))
575583 size := int (pio .U32BE (b [n :]))
576- if size > 5242880 {
577- log .Println ("track size" , size )
578- err = parseErr ("_len_Entries" , 5242880 , err )
579- return
580- }
581584 if len (b ) < n + size {
582585 err = parseErr ("TagSizeInvalid" , n + offset , err )
583586 return
@@ -608,6 +611,10 @@ func (self *Track) Unmarshal(b []byte, offset int) (n int, err error) {
608611 err = parseErr ("" , n + offset , err )
609612 return
610613 }
614+ if len (self .Unknowns ) > 100 {
615+ err = errors .New ("too many unknowns" )
616+ return
617+ }
611618 self .Unknowns = append (self .Unknowns , atom )
612619 }
613620 }
@@ -947,6 +954,10 @@ func (self *Media) Unmarshal(b []byte, offset int) (n int, err error) {
947954 err = parseErr ("" , n + offset , err )
948955 return
949956 }
957+ if len (self .Unknowns ) > 100 {
958+ err = errors .New ("too many unknowns" )
959+ return
960+ }
950961 self .Unknowns = append (self .Unknowns , atom )
951962 }
952963 }
@@ -1180,6 +1191,10 @@ func (self *MediaInfo) Unmarshal(b []byte, offset int) (n int, err error) {
11801191 err = parseErr ("" , n + offset , err )
11811192 return
11821193 }
1194+ if len (self .Unknowns ) > 100 {
1195+ err = errors .New ("too many unknowns" )
1196+ return
1197+ }
11831198 self .Unknowns = append (self .Unknowns , atom )
11841199 }
11851200 }
@@ -1262,6 +1277,10 @@ func (self *DataInfo) Unmarshal(b []byte, offset int) (n int, err error) {
12621277 err = parseErr ("" , n + offset , err )
12631278 return
12641279 }
1280+ if len (self .Unknowns ) > 100 {
1281+ err = errors .New ("too many unknowns" )
1282+ return
1283+ }
12651284 self .Unknowns = append (self .Unknowns , atom )
12661285 }
12671286 }
@@ -1824,6 +1843,10 @@ func (self *SampleDesc) Unmarshal(b []byte, offset int) (n int, err error) {
18241843 err = parseErr ("" , n + offset , err )
18251844 return
18261845 }
1846+ if len (self .Unknowns ) > 100 {
1847+ err = errors .New ("too many unknowns" )
1848+ return
1849+ }
18271850 self .Unknowns = append (self .Unknowns , atom )
18281851 }
18291852 }
@@ -1989,6 +2012,10 @@ func (self *MP4ADesc) Unmarshal(b []byte, offset int) (n int, err error) {
19892012 err = parseErr ("" , n + offset , err )
19902013 return
19912014 }
2015+ if len (self .Unknowns ) > 100 {
2016+ err = errors .New ("too many unknowns" )
2017+ return
2018+ }
19922019 self .Unknowns = append (self .Unknowns , atom )
19932020 }
19942021 }
@@ -2298,6 +2325,10 @@ func (self *AVC1Desc) Unmarshal(b []byte, offset int) (n int, err error) {
22982325 err = parseErr ("" , n + offset , err )
22992326 return
23002327 }
2328+ if len (self .Unknowns ) > 100 {
2329+ err = errors .New ("too many unknowns" )
2330+ return
2331+ }
23012332 self .Unknowns = append (self .Unknowns , atom )
23022333 }
23032334 }
@@ -2418,6 +2449,10 @@ func (self *HV1Desc) Unmarshal(b []byte, offset int) (n int, err error) {
24182449 err = parseErr ("" , n + offset , err )
24192450 return
24202451 }
2452+ if len (self .Unknowns ) > 100 {
2453+ err = errors .New ("too many unknowns" )
2454+ return
2455+ }
24212456 self .Unknowns = append (self .Unknowns , atom )
24222457 }
24232458 }
@@ -2559,10 +2594,6 @@ func (self *TimeToSample) Unmarshal(b []byte, offset int) (n int, err error) {
25592594 var _len_Entries uint32
25602595 _len_Entries = pio .U32BE (b [n :])
25612596 n += 4
2562- if _len_Entries > 5242880 {
2563- err = parseErr ("_len_Entries" , 5242880 , err )
2564- return
2565- }
25662597 self .Entries = make ([]TimeToSampleEntry , _len_Entries )
25672598 if len (b ) < n + LenTimeToSampleEntry * len (self .Entries ) {
25682599 err = parseErr ("TimeToSampleEntry" , n + offset , err )
@@ -2647,10 +2678,6 @@ func (self *SampleToChunk) Unmarshal(b []byte, offset int) (n int, err error) {
26472678 var _len_Entries uint32
26482679 _len_Entries = pio .U32BE (b [n :])
26492680 n += 4
2650- if _len_Entries > 5242880 {
2651- err = parseErr ("_len_Entries" , 5242880 , err )
2652- return
2653- }
26542681 self .Entries = make ([]SampleToChunkEntry , _len_Entries )
26552682 if len (b ) < n + LenSampleToChunkEntry * len (self .Entries ) {
26562683 err = parseErr ("SampleToChunkEntry" , n + offset , err )
@@ -2738,10 +2765,6 @@ func (self *CompositionOffset) Unmarshal(b []byte, offset int) (n int, err error
27382765 var _len_Entries uint32
27392766 _len_Entries = pio .U32BE (b [n :])
27402767 n += 4
2741- if _len_Entries > 5242880 {
2742- err = parseErr ("_len_Entries" , 5242880 , err )
2743- return
2744- }
27452768 self .Entries = make ([]CompositionOffsetEntry , _len_Entries )
27462769 if len (b ) < n + LenCompositionOffsetEntry * len (self .Entries ) {
27472770 err = parseErr ("CompositionOffsetEntry" , n + offset , err )
@@ -2826,10 +2849,6 @@ func (self *SyncSample) Unmarshal(b []byte, offset int) (n int, err error) {
28262849 var _len_Entries uint32
28272850 _len_Entries = pio .U32BE (b [n :])
28282851 n += 4
2829- if _len_Entries > 5242880 {
2830- err = parseErr ("_len_Entries" , 5242880 , err )
2831- return
2832- }
28332852 self .Entries = make ([]uint32 , _len_Entries )
28342853 if len (b ) < n + 4 * len (self .Entries ) {
28352854 err = parseErr ("uint32" , n + offset , err )
@@ -2897,10 +2916,6 @@ func (self *ChunkOffset) Unmarshal(b []byte, offset int) (n int, err error) {
28972916 var _len_Entries uint32
28982917 _len_Entries = pio .U32BE (b [n :])
28992918 n += 4
2900- if _len_Entries > 5242880 {
2901- err = parseErr ("_len_Entries" , 5242880 , err )
2902- return
2903- }
29042919 self .Entries = make ([]uint32 , _len_Entries )
29052920 if len (b ) < n + 4 * len (self .Entries ) {
29062921 err = parseErr ("uint32" , n + offset , err )
@@ -2981,6 +2996,10 @@ func (self *MovieFrag) Unmarshal(b []byte, offset int) (n int, err error) {
29812996 err = parseErr ("traf" , n + offset , err )
29822997 return
29832998 }
2999+ if len (self .Tracks ) > 100 {
3000+ err = errors .New ("too many tracks" )
3001+ return
3002+ }
29843003 self .Tracks = append (self .Tracks , atom )
29853004 }
29863005 default :
@@ -2990,6 +3009,10 @@ func (self *MovieFrag) Unmarshal(b []byte, offset int) (n int, err error) {
29903009 err = parseErr ("" , n + offset , err )
29913010 return
29923011 }
3012+ if len (self .Unknowns ) > 100 {
3013+ err = errors .New ("too many unknowns" )
3014+ return
3015+ }
29933016 self .Unknowns = append (self .Unknowns , atom )
29943017 }
29953018 }
@@ -3154,6 +3177,10 @@ func (self *TrackFrag) Unmarshal(b []byte, offset int) (n int, err error) {
31543177 err = parseErr ("" , n + offset , err )
31553178 return
31563179 }
3180+ if len (self .Unknowns ) > 100 {
3181+ err = errors .New ("too many unknowns" )
3182+ return
3183+ }
31573184 self .Unknowns = append (self .Unknowns , atom )
31583185 }
31593186 }
@@ -3224,6 +3251,10 @@ func (self *MovieExtend) Unmarshal(b []byte, offset int) (n int, err error) {
32243251 err = parseErr ("trex" , n + offset , err )
32253252 return
32263253 }
3254+ if len (self .Tracks ) > 100 {
3255+ err = errors .New ("too many tracks" )
3256+ return
3257+ }
32273258 self .Tracks = append (self .Tracks , atom )
32283259 }
32293260 default :
@@ -3233,6 +3264,10 @@ func (self *MovieExtend) Unmarshal(b []byte, offset int) (n int, err error) {
32333264 err = parseErr ("" , n + offset , err )
32343265 return
32353266 }
3267+ if len (self .Unknowns ) > 100 {
3268+ err = errors .New ("too many unknowns" )
3269+ return
3270+ }
32363271 self .Unknowns = append (self .Unknowns , atom )
32373272 }
32383273 }
@@ -3415,11 +3450,6 @@ func (self *SampleSize) Unmarshal(b []byte, offset int) (n int, err error) {
34153450 var _len_Entries uint32
34163451 _len_Entries = pio .U32BE (b [n :])
34173452 n += 4
3418- if _len_Entries > 5242880 {
3419- err = parseErr ("_len_Entries" , 5242880 , err )
3420- log .Println ("_len_Entries" , _len_Entries )
3421- return
3422- }
34233453 self .Entries = make ([]uint32 , _len_Entries )
34243454 if len (b ) < n + 4 * len (self .Entries ) {
34253455 err = parseErr ("uint32" , n + offset , err )
@@ -3552,10 +3582,6 @@ func (self *TrackFragRun) Unmarshal(b []byte, offset int) (n int, err error) {
35523582 var _len_Entries uint32
35533583 _len_Entries = pio .U32BE (b [n :])
35543584 n += 4
3555- if _len_Entries > 5242880 {
3556- err = parseErr ("_len_Entries" , 5242880 , err )
3557- return
3558- }
35593585 self .Entries = make ([]TrackFragRunEntry , _len_Entries )
35603586 if self .Flags & TRUN_DATA_OFFSET != 0 {
35613587 {
0 commit comments