diff --git a/crates/resvg/tests/integration/render.rs b/crates/resvg/tests/integration/render.rs
index 8683f61b1..d29e995da 100644
--- a/crates/resvg/tests/integration/render.rs
+++ b/crates/resvg/tests/integration/render.rs
@@ -504,6 +504,7 @@ use crate::render;
#[test] fn paint_servers_linearGradient_attributes_via_xlink_href() { assert_eq!(render("tests/paint-servers/linearGradient/attributes-via-xlink-href"), 0); }
#[test] fn paint_servers_linearGradient_default_attributes() { assert_eq!(render("tests/paint-servers/linearGradient/default-attributes"), 0); }
#[test] fn paint_servers_linearGradient_gradientTransform_and_transform() { assert_eq!(render("tests/paint-servers/linearGradient/gradientTransform-and-transform"), 0); }
+#[test] fn paint_servers_linearGradient_gradientTransform_via_href() { assert_eq!(render("tests/paint-servers/linearGradient/gradientTransform-via-href"), 0); }
#[test] fn paint_servers_linearGradient_gradientTransform() { assert_eq!(render("tests/paint-servers/linearGradient/gradientTransform"), 0); }
#[test] fn paint_servers_linearGradient_gradientUnits_eq_objectBoundingBox_with_percent() { assert_eq!(render("tests/paint-servers/linearGradient/gradientUnits=objectBoundingBox-with-percent"), 0); }
#[test] fn paint_servers_linearGradient_gradientUnits_eq_userSpaceOnUse_with_percent() { assert_eq!(render("tests/paint-servers/linearGradient/gradientUnits=userSpaceOnUse-with-percent"), 0); }
@@ -553,6 +554,7 @@ use crate::render;
#[test] fn paint_servers_pattern_pattern_on_child() { assert_eq!(render("tests/paint-servers/pattern/pattern-on-child"), 0); }
#[test] fn paint_servers_pattern_patternContentUnits_with_viewBox() { assert_eq!(render("tests/paint-servers/pattern/patternContentUnits-with-viewBox"), 0); }
#[test] fn paint_servers_pattern_patternContentUnits_eq_objectBoundingBox() { assert_eq!(render("tests/paint-servers/pattern/patternContentUnits=objectBoundingBox"), 0); }
+#[test] fn paint_servers_pattern_patternTransform_via_href() { assert_eq!(render("tests/paint-servers/pattern/patternTransform-via-href"), 0); }
#[test] fn paint_servers_pattern_patternUnits_eq_objectBoundingBox_with_percent() { assert_eq!(render("tests/paint-servers/pattern/patternUnits=objectBoundingBox-with-percent"), 0); }
#[test] fn paint_servers_pattern_patternUnits_eq_objectBoundingBox() { assert_eq!(render("tests/paint-servers/pattern/patternUnits=objectBoundingBox"), 0); }
#[test] fn paint_servers_pattern_patternUnits_eq_userSpaceOnUse_with_percent() { assert_eq!(render("tests/paint-servers/pattern/patternUnits=userSpaceOnUse-with-percent"), 0); }
@@ -585,6 +587,7 @@ use crate::render;
#[test] fn paint_servers_radialGradient_fy_resolving_2() { assert_eq!(render("tests/paint-servers/radialGradient/fy-resolving-2"), 0); }
#[test] fn paint_servers_radialGradient_fy_resolving_3() { assert_eq!(render("tests/paint-servers/radialGradient/fy-resolving-3"), 0); }
#[test] fn paint_servers_radialGradient_gradientTransform_and_transform() { assert_eq!(render("tests/paint-servers/radialGradient/gradientTransform-and-transform"), 0); }
+#[test] fn paint_servers_radialGradient_gradientTransform_via_href() { assert_eq!(render("tests/paint-servers/radialGradient/gradientTransform-via-href"), 0); }
#[test] fn paint_servers_radialGradient_gradientTransform() { assert_eq!(render("tests/paint-servers/radialGradient/gradientTransform"), 0); }
#[test] fn paint_servers_radialGradient_gradientUnits_eq_objectBoundingBox_with_percent() { assert_eq!(render("tests/paint-servers/radialGradient/gradientUnits=objectBoundingBox-with-percent"), 0); }
#[test] fn paint_servers_radialGradient_gradientUnits_eq_userSpaceOnUse_with_percent() { assert_eq!(render("tests/paint-servers/radialGradient/gradientUnits=userSpaceOnUse-with-percent"), 0); }
diff --git a/crates/resvg/tests/tests/paint-servers/linearGradient/gradientTransform-via-href.png b/crates/resvg/tests/tests/paint-servers/linearGradient/gradientTransform-via-href.png
new file mode 100644
index 000000000..448c7b44d
Binary files /dev/null and b/crates/resvg/tests/tests/paint-servers/linearGradient/gradientTransform-via-href.png differ
diff --git a/crates/resvg/tests/tests/paint-servers/linearGradient/gradientTransform-via-href.svg b/crates/resvg/tests/tests/paint-servers/linearGradient/gradientTransform-via-href.svg
new file mode 100644
index 000000000..37e23ff61
--- /dev/null
+++ b/crates/resvg/tests/tests/paint-servers/linearGradient/gradientTransform-via-href.svg
@@ -0,0 +1,30 @@
+
diff --git a/crates/resvg/tests/tests/paint-servers/pattern/patternTransform-via-href.png b/crates/resvg/tests/tests/paint-servers/pattern/patternTransform-via-href.png
new file mode 100644
index 000000000..5c1ce9b78
Binary files /dev/null and b/crates/resvg/tests/tests/paint-servers/pattern/patternTransform-via-href.png differ
diff --git a/crates/resvg/tests/tests/paint-servers/pattern/patternTransform-via-href.svg b/crates/resvg/tests/tests/paint-servers/pattern/patternTransform-via-href.svg
new file mode 100644
index 000000000..eefcdffba
--- /dev/null
+++ b/crates/resvg/tests/tests/paint-servers/pattern/patternTransform-via-href.svg
@@ -0,0 +1,31 @@
+
diff --git a/crates/resvg/tests/tests/paint-servers/radialGradient/gradientTransform-via-href.png b/crates/resvg/tests/tests/paint-servers/radialGradient/gradientTransform-via-href.png
new file mode 100644
index 000000000..d13a9a539
Binary files /dev/null and b/crates/resvg/tests/tests/paint-servers/radialGradient/gradientTransform-via-href.png differ
diff --git a/crates/resvg/tests/tests/paint-servers/radialGradient/gradientTransform-via-href.svg b/crates/resvg/tests/tests/paint-servers/radialGradient/gradientTransform-via-href.svg
new file mode 100644
index 000000000..0461fe23d
--- /dev/null
+++ b/crates/resvg/tests/tests/paint-servers/radialGradient/gradientTransform-via-href.svg
@@ -0,0 +1,30 @@
+
diff --git a/crates/usvg/src/parser/paint_server.rs b/crates/usvg/src/parser/paint_server.rs
index 3102899b7..5d5bc4c01 100644
--- a/crates/usvg/src/parser/paint_server.rs
+++ b/crates/usvg/src/parser/paint_server.rs
@@ -54,7 +54,8 @@ fn convert_linear(node: SvgNode, state: &converter::State) -> Option Option