mov: Prevent illegal writes when chapter titles are very short.
This commit is contained in:
		
							parent
							
								
									f492df0927
								
							
						
					
					
						commit
						8fb22c3d47
					
				@ -2369,14 +2369,21 @@ static void mov_read_chapters(AVFormatContext *s)
 | 
				
			|||||||
        // The samples could theoretically be in any encoding if there's an encd
 | 
					        // The samples could theoretically be in any encoding if there's an encd
 | 
				
			||||||
        // atom following, but in practice are only utf-8 or utf-16, distinguished
 | 
					        // atom following, but in practice are only utf-8 or utf-16, distinguished
 | 
				
			||||||
        // instead by the presence of a BOM
 | 
					        // instead by the presence of a BOM
 | 
				
			||||||
        ch = avio_rb16(sc->pb);
 | 
					        if (!len) {
 | 
				
			||||||
        if (ch == 0xfeff)
 | 
					            title[0] = 0;
 | 
				
			||||||
            avio_get_str16be(sc->pb, len, title, title_len);
 | 
					        } else {
 | 
				
			||||||
        else if (ch == 0xfffe)
 | 
					            ch = avio_rb16(sc->pb);
 | 
				
			||||||
            avio_get_str16le(sc->pb, len, title, title_len);
 | 
					            if (ch == 0xfeff)
 | 
				
			||||||
        else {
 | 
					                avio_get_str16be(sc->pb, len, title, title_len);
 | 
				
			||||||
            AV_WB16(title, ch);
 | 
					            else if (ch == 0xfffe)
 | 
				
			||||||
            avio_get_str(sc->pb, len - 2, title + 2, title_len - 2);
 | 
					                avio_get_str16le(sc->pb, len, title, title_len);
 | 
				
			||||||
 | 
					            else {
 | 
				
			||||||
 | 
					                AV_WB16(title, ch);
 | 
				
			||||||
 | 
					                if (len == 1 || len == 2)
 | 
				
			||||||
 | 
					                    title[len] = '0';
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                    avio_get_str(sc->pb, len - 2, title + 2, title_len - 2);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ff_new_chapter(s, i, st->time_base, sample->timestamp, end, title);
 | 
					        ff_new_chapter(s, i, st->time_base, sample->timestamp, end, title);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user