diff --git a/components/layout/display_list/mod.rs b/components/layout/display_list/mod.rs index 543ebb64ae2..de518314672 100644 --- a/components/layout/display_list/mod.rs +++ b/components/layout/display_list/mod.rs @@ -1509,6 +1509,13 @@ impl<'a> BuilderForBoxFragment<'a> { }; let size = euclid::Size2D::new(width as i32, height as i32); + + // If the size of the border is zero or the size of the border image is zero, just + // don't render anything. Zero-sized gradients cause problems in WebRender. + if size.is_empty() || border_image_size.is_empty() { + return true; + } + let details = BorderDetails::NinePatch(NinePatchBorder { source, width: size.width, diff --git a/tests/wpt/meta/MANIFEST.json b/tests/wpt/meta/MANIFEST.json index 574a66753c1..5c7b69013e0 100644 --- a/tests/wpt/meta/MANIFEST.json +++ b/tests/wpt/meta/MANIFEST.json @@ -952,6 +952,15 @@ ] ] }, + "css-borders": { + "border-image-gradient-zero-size-transform-crash.html": [ + "c722267fc08e41e1d5e4496d583fcaf4d179b2dd", + [ + null, + {} + ] + ] + }, "css-break": { "area-crash.html": [ "d47327cde3f6a963b8c6e61280d3063b28a2d25c", diff --git a/tests/wpt/tests/css/css-borders/border-image-gradient-zero-size-transform-crash.html b/tests/wpt/tests/css/css-borders/border-image-gradient-zero-size-transform-crash.html new file mode 100644 index 00000000000..c722267fc08 --- /dev/null +++ b/tests/wpt/tests/css/css-borders/border-image-gradient-zero-size-transform-crash.html @@ -0,0 +1,18 @@ + + + +
+ + +