diff --git a/layout/reftests/svg/pattern-scale-01-ref.svg b/layout/reftests/svg/pattern-scale-01-ref.svg
new file mode 100644
index 000000000000..b8d48935d911
--- /dev/null
+++ b/layout/reftests/svg/pattern-scale-01-ref.svg
@@ -0,0 +1,13 @@
+
+
diff --git a/layout/reftests/svg/pattern-scale-01.svg b/layout/reftests/svg/pattern-scale-01.svg
new file mode 100644
index 000000000000..39a08ed5ed2e
--- /dev/null
+++ b/layout/reftests/svg/pattern-scale-01.svg
@@ -0,0 +1,13 @@
+
+
diff --git a/layout/reftests/svg/reftest.list b/layout/reftests/svg/reftest.list
index 015e98541f91..ce2ec1c6a2e7 100644
--- a/layout/reftests/svg/reftest.list
+++ b/layout/reftests/svg/reftest.list
@@ -176,6 +176,7 @@ fails-if(Android&&layersOpenGL) == path-04.svg pass.svg
== pattern-live-01a.svg pattern-live-01-ref.svg
== pattern-live-01b.svg pattern-live-01-ref.svg
== pattern-live-01c.svg pattern-live-01-ref.svg
+== pattern-scale-01.svg pattern-scale-01-ref.svg
== pattern-transform-presence-01.svg pattern-transform-presence-01-ref.svg
== polygon-marker-01.svg pass.svg
== polygon-points-negative-01.svg pass.svg
diff --git a/layout/svg/base/src/nsSVGPatternFrame.cpp b/layout/svg/base/src/nsSVGPatternFrame.cpp
index f563ad9e2ede..c910d57f1d82 100644
--- a/layout/svg/base/src/nsSVGPatternFrame.cpp
+++ b/layout/svg/base/src/nsSVGPatternFrame.cpp
@@ -261,8 +261,10 @@ nsSVGPatternFrame::PaintPattern(gfxASurface** surface,
bool resultOverflows;
gfxIntSize surfaceSize =
- nsSVGUtils::ConvertToSurfaceSize(gfxSize(patternWidth, patternHeight),
- &resultOverflows);
+ nsSVGUtils::ConvertToSurfaceSize(
+ gfxSize(patternWidth * fabs(patternMatrix->xx),
+ patternHeight * fabs(patternMatrix->yy)),
+ &resultOverflows);
// 0 disables rendering, < 0 is an error
if (surfaceSize.width <= 0 || surfaceSize.height <= 0)