Avoid calculating NaN for brush tip state parameters #429
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Avoid calculating NaN for brush tip state parameters
Base brush attributes and individual brush behavior modifier values are guaranteed to be finite. However, two finite values multiplied together can overflow to infinity, and later multiplying that infinity by zero results in NaN, which is an invalid value for e.g. a brush tip width or height. This is causing occasional fuzz test failures.
If the multiplications had happened in a different order, we would first multiply zero by a finite value to get zero, then multiply that by the other finite value to get zero. In this particular context, infinities can only arise due to overflow, so it seems reasonable in this context to define zero times infinity as zero. Therefore, this change fixes the issue by checking for zeros before multiplying behavior modifiers together.