avcodec/g729postfilter: Optimize out overflowing multiplication from apply_tilt_comp()
Fixes: signed integer overflow: -1114392282 * 2 cannot be represented in type 'int' Fixes: 19236/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_G729_fuzzer-5741678938030080 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
		
							parent
							
								
									fea90e9438
								
							
						
					
					
						commit
						c0bd5fa43d
					
				@ -486,14 +486,14 @@ static int16_t apply_tilt_comp(int16_t* out, int16_t* res_pst, int refl_coeff,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (refl_coeff > 0) {
 | 
					    if (refl_coeff > 0) {
 | 
				
			||||||
        gt = (refl_coeff * G729_TILT_FACTOR_PLUS + 0x4000) >> 15;
 | 
					        gt = (refl_coeff * G729_TILT_FACTOR_PLUS + 0x4000) >> 15;
 | 
				
			||||||
        fact = 0x4000; // 0.5 in (0.15)
 | 
					        fact = 0x2000; // 0.5 in (0.15)
 | 
				
			||||||
        sh_fact = 15;
 | 
					        sh_fact = 14;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        gt = (refl_coeff * G729_TILT_FACTOR_MINUS + 0x4000) >> 15;
 | 
					        gt = (refl_coeff * G729_TILT_FACTOR_MINUS + 0x4000) >> 15;
 | 
				
			||||||
        fact = 0x800; // 0.5 in (3.12)
 | 
					        fact = 0x400; // 0.5 in (3.12)
 | 
				
			||||||
        sh_fact = 12;
 | 
					        sh_fact = 11;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    ga = (fact << 15) / av_clip_int16(32768 - FFABS(gt));
 | 
					    ga = (fact << 16) / av_clip_int16(32768 - FFABS(gt));
 | 
				
			||||||
    gt >>= 1;
 | 
					    gt >>= 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Apply tilt compensation filter to signal. */
 | 
					    /* Apply tilt compensation filter to signal. */
 | 
				
			||||||
@ -503,12 +503,12 @@ static int16_t apply_tilt_comp(int16_t* out, int16_t* res_pst, int refl_coeff,
 | 
				
			|||||||
        tmp2 = (gt * res_pst[i-1]) * 2 + 0x4000;
 | 
					        tmp2 = (gt * res_pst[i-1]) * 2 + 0x4000;
 | 
				
			||||||
        tmp2 = res_pst[i] + (tmp2 >> 15);
 | 
					        tmp2 = res_pst[i] + (tmp2 >> 15);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        tmp2 = (tmp2 * ga * 2 + fact) >> sh_fact;
 | 
					        tmp2 = (tmp2 * ga + fact) >> sh_fact;
 | 
				
			||||||
        out[i] = tmp2;
 | 
					        out[i] = tmp2;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    tmp2 = (gt * ht_prev_data) * 2 + 0x4000;
 | 
					    tmp2 = (gt * ht_prev_data) * 2 + 0x4000;
 | 
				
			||||||
    tmp2 = res_pst[0] + (tmp2 >> 15);
 | 
					    tmp2 = res_pst[0] + (tmp2 >> 15);
 | 
				
			||||||
    tmp2 = (tmp2 * ga * 2 + fact) >> sh_fact;
 | 
					    tmp2 = (tmp2 * ga + fact) >> sh_fact;
 | 
				
			||||||
    out[0] = tmp2;
 | 
					    out[0] = tmp2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return tmp;
 | 
					    return tmp;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user