Bug 1390352 - Add check the return value of Servo_AnimationValues_ComputeDistance. r?hiro
We need to check the return value of Servo_AnimationValues_ComputeDistance
in order to check whether we support the specified paced animation value.
Servo_AnimationValues_ComputeDistance will return a negative value when the
function fails, So this patch make handling this failure pattern.
MozReview-Commit-ID: 7UB3wJEQxmz
--- a/dom/smil/nsSMILCSSValueType.cpp
+++ b/dom/smil/nsSMILCSSValueType.cpp
@@ -451,16 +451,20 @@ ComputeDistanceForServo(const ValueWrapp
aFromWrapper ? &aFromWrapper->mServoValues[0] : nullptr;
const RefPtr<RawServoAnimationValue>* toValue = &aToWrapper.mServoValues[0];
RefPtr<RawServoAnimationValue> zeroValueStorage;
if (!FinalizeServoAnimationValues(fromValue, toValue, zeroValueStorage)) {
return NS_ERROR_FAILURE;
}
double distance = Servo_AnimationValues_ComputeDistance(*fromValue, *toValue);
+ if (distance < 0.0) {
+ return NS_ERROR_FAILURE;
+ }
+
if (len == 1) {
aDistance = distance;
return NS_OK;
}
squareDistance += distance * distance;
}
aDistance = sqrt(squareDistance);
--- a/layout/style/StyleAnimationValue.cpp
+++ b/layout/style/StyleAnimationValue.cpp
@@ -5395,21 +5395,24 @@ AnimationValue::ComputeDistance(nsCSSPro
return 0.0;
}
MOZ_ASSERT(!mServo != mGecko.IsNull());
MOZ_ASSERT(mGecko.IsNull() == aOther.mGecko.IsNull() &&
!mServo == !aOther.mServo,
"Animation values should have the same style engine");
+ double distance= 0.0;
if (mServo) {
- return Servo_AnimationValues_ComputeDistance(mServo, aOther.mServo);
+ distance = Servo_AnimationValues_ComputeDistance(mServo, aOther.mServo);
+ return distance < 0.0
+ ? 0.0
+ : distance;
}
- double distance = 0.0;
return StyleAnimationValue::ComputeDistance(aProperty,
mGecko,
aOther.mGecko,
aStyleContext->AsGecko(),
distance)
? distance
: 0.0;
}