File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -93,13 +93,18 @@ impl<'a> FirstPassParser<'a> {
9393 let mut reuseable_buffer = vec ! [ 0_u8 ; 100_000 ] ;
9494 // Loop that goes trough the entire file
9595 loop {
96- if demo_bytes. len ( ) < self . ptr {
96+ // Need at least a few bytes to read frame header (3 varints, minimum 1 byte each)
97+ if self . ptr + 3 > demo_bytes. len ( ) {
9798 break ;
9899 }
99100 if exit_early && self . cls_by_id . is_some ( ) && !self . ge_list . is_empty ( ) {
100101 break ;
101102 }
102- let frame = self . read_frame ( demo_bytes) ?;
103+ let frame = match self . read_frame ( demo_bytes) {
104+ Ok ( f) => f,
105+ Err ( DemoParserError :: OutOfBytesError ) => break ,
106+ Err ( e) => return Err ( e) ,
107+ } ;
103108 if self . is_packet_we_skip_on_first_pass ( frame. demo_cmd ) {
104109 self . ptr += frame. size ;
105110 continue ;
Original file line number Diff line number Diff line change @@ -62,10 +62,15 @@ impl<'a> SecondPassParser<'a> {
6262 let mut buf = vec ! [ 0_u8 ; INNER_BUF_DEFAULT_LEN ] ;
6363 let mut buf2 = vec ! [ 0_u8 ; OUTER_BUF_DEFAULT_LEN ] ;
6464 loop {
65- if demo_bytes. len ( ) < self . ptr {
65+ // Need at least a few bytes to read frame header (3 varints, minimum 1 byte each)
66+ if self . ptr + 3 > demo_bytes. len ( ) {
6667 break ;
6768 }
68- let frame = self . read_frame ( demo_bytes) ?;
69+ let frame = match self . read_frame ( demo_bytes) {
70+ Ok ( f) => f,
71+ Err ( DemoParserError :: OutOfBytesError ) => break ,
72+ Err ( e) => return Err ( e) ,
73+ } ;
6974 if frame. demo_cmd == DemAnimationData || frame. demo_cmd == DemSendTables || frame. demo_cmd == DemStringTables {
7075 self . ptr += frame. size as usize ;
7176 continue ;
You can’t perform that action at this time.
0 commit comments