Skip to content

Commit dc22c36

Browse files
committed
testing
1 parent 7bb8737 commit dc22c36

File tree

2 files changed

+128
-40
lines changed

2 files changed

+128
-40
lines changed

format/mp4/mp4io/atoms.go

Lines changed: 61 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package mp4io
22

33
import (
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

Comments
 (0)