avcodec/assenc: fix potential overread.
This commit is contained in:
		
							parent
							
								
									378a830e7b
								
							
						
					
					
						commit
						860a081058
					
				@ -80,9 +80,16 @@ static int ass_encode_frame(AVCodecContext *avctx,
 | 
			
		||||
             * will be "Marked=N" instead of the layer num, so we will
 | 
			
		||||
             * have layer=0, which is fine. */
 | 
			
		||||
            layer = strtol(ass, &p, 10);
 | 
			
		||||
            if (*p) p += strcspn(p, ",") + 1; // skip layer or marked
 | 
			
		||||
            if (*p) p += strcspn(p, ",") + 1; // skip start timestamp
 | 
			
		||||
            if (*p) p += strcspn(p, ",") + 1; // skip end timestamp
 | 
			
		||||
 | 
			
		||||
#define SKIP_ENTRY(ptr) do {        \
 | 
			
		||||
    char *sep = strchr(ptr, ',');   \
 | 
			
		||||
    if (sep)                        \
 | 
			
		||||
        ptr = sep + 1;              \
 | 
			
		||||
} while (0)
 | 
			
		||||
 | 
			
		||||
            SKIP_ENTRY(p); // skip layer or marked
 | 
			
		||||
            SKIP_ENTRY(p); // skip start timestamp
 | 
			
		||||
            SKIP_ENTRY(p); // skip end timestamp
 | 
			
		||||
            snprintf(ass_line, sizeof(ass_line), "%d,%ld,%s", ++s->id, layer, p);
 | 
			
		||||
            ass_line[strcspn(ass_line, "\r\n")] = 0;
 | 
			
		||||
            ass = ass_line;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user