Fix the panic when transform is non-invertible

This commit is contained in:
Nazım Can Altınova 2017-02-02 04:42:44 +03:00
parent 3c8daca772
commit f362f6f93b
3 changed files with 44 additions and 1 deletions

View file

@ -182,7 +182,14 @@ impl DisplayList {
*client_point
} else {
let point = *translated_point - stacking_context.bounds.origin;
let inv_transform = stacking_context.transform.inverse().unwrap();
let inv_transform = match stacking_context.transform.inverse() {
Some(transform) => transform,
None => {
// If a transform function causes the current transformation matrix of an object
// to be non-invertible, the object and its content do not get displayed.
return;
}
};
let frac_point = inv_transform.transform_point(&Point2D::new(point.x.to_f32_px(),
point.y.to_f32_px()));
Point2D::new(Au::from_f32_px(frac_point.x), Au::from_f32_px(frac_point.y))

View file

@ -13321,6 +13321,12 @@
{}
]
],
"mozilla/non-invertible-transform.html": [
[
"/_mozilla/mozilla/non-invertible-transform.html",
{}
]
],
"mozilla/out-of-order-stylesheet-loads-and-imports.html": [
[
"/_mozilla/mozilla/out-of-order-stylesheet-loads-and-imports.html",
@ -25886,6 +25892,10 @@
"fe965e58fdcb78d08384a9fde74c982e34768745",
"testharness"
],
"mozilla/non-invertible-transform.html": [
"6fa68fe08c9dd5d594e838da51617951193fee19",
"testharness"
],
"mozilla/out-of-order-stylesheet-loads-and-imports.html": [
"462f5b6a1f47e0e40ad407ccd13b3058176d106d",
"testharness"

View file

@ -0,0 +1,26 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Shouldn't panic when transform is non-invertible</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
#test {
width: 100px;
height: 100px;
transform: scale(0);
}
</style>
</head>
<body>
<div id="test"></div>
<script>
async_test(function(t) {
setTimeout(t.step_func_done(function() {
var elements = document.elementsFromPoint(10, 10);
}), 500);
}, "Shouldn't panic when transform is non-invertible");
</script>
</body>
</html>