Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix issues found by fuzzing #240

Closed
wants to merge 5 commits into from
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Fix blur coefficient calculation buffer overflow
Found by fuzzer test case id:000082,sig:11,src:002579,op:havoc,rep:8.
Correctness should be checked, but this fixes the overflow for good.
  • Loading branch information
grigorig committed Oct 4, 2016
commit 08e754612019ed84d1db0d1fc4f5798248decd75
2 changes: 1 addition & 1 deletion libass/ass_blur.c
Expand Up @@ -744,7 +744,7 @@ static void calc_coeff(double mu[4], const int index[4], int prefilter, double r
( 17 - 126 * mul + 273 * mul2 - 164 * mul3) / 12096,
};

double mat_freq[13];
double mat_freq[14];
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wow, this function is so extremely hard to follow. Is it right that vec_freq below still has only 13 items?

Copy link
Member Author

@grigorig grigorig Oct 4, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I don't really know how this function works, either. I just deducted that in the works case, we need 14 elements in that array. 13 elements should still be fine for vec_freq, as far as I can see. Care to assist @MrSmile? Maybe you can document this a little further.

It kind of looks like a single iteration least squares fitting / error minimization, but like I said, I don't get it either. :)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've tried to document algorithm here, but it's too math-heavy. Basically mat_freq and vec_freq used in calculation of coefficients for least squares problem and any sufficient size should work. I'd tried to determine minimal required size, but forgot that coeff_blur121 requires additional zero element to work.

memcpy(mat_freq, kernel, sizeof(kernel));
memset(mat_freq + 4, 0, sizeof(mat_freq) - sizeof(kernel));
int n = 6;
Expand Down