diff --git a/gnu/local.mk b/gnu/local.mk
index 69be1a07c7..c29e99ba38 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1238,6 +1238,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/gdm-remove-hardcoded-xwayland-path.patch	\
   %D%/packages/patches/gdm-wayland-session-wrapper-from-env.patch	\
   %D%/packages/patches/gdm-pass-gdk-pixbuf-loader-env.patch	\
+  %D%/packages/patches/gegl-compatibility-old-librsvg.patch	\
   %D%/packages/patches/gemmi-fix-pegtl-usage.patch		\
   %D%/packages/patches/gemmi-fix-sajson-types.patch		\
   %D%/packages/patches/genimage-mke2fs-test.patch		\
diff --git a/gnu/packages/gimp.scm b/gnu/packages/gimp.scm
index b1ff08d652..167de97ec5 100644
--- a/gnu/packages/gimp.scm
+++ b/gnu/packages/gimp.scm
@@ -215,7 +215,7 @@ (define-public babl
 (define-public gegl
   (package
     (name "gegl")
-    (version "0.4.42")
+    (version "0.4.46")
     (source
      (origin
        (method url-fetch)
@@ -228,8 +228,10 @@ (define-public gegl
                   (string-append "ftp://ftp.gtk.org/pub/gegl/"
                                  (version-major+minor version)
                                  "/gegl-" version ".tar.xz")))
+       (patches
+        (search-patches "gegl-compatibility-old-librsvg.patch"))
        (sha256
-        (base32 "0bg0vlmj4n9x1291b9fsjqxsal192zlg48pa57f6xid6p863ma5b"))))
+        (base32 "14p8n6vily0yp6gqafl2xy7d2rh1j48pcj0a7mglqxy83d4b5cyh"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/patches/gegl-compatibility-old-librsvg.patch b/gnu/packages/patches/gegl-compatibility-old-librsvg.patch
new file mode 100644
index 0000000000..3e5733f9fd
--- /dev/null
+++ b/gnu/packages/patches/gegl-compatibility-old-librsvg.patch
@@ -0,0 +1,80 @@
+From a99a93e5c9013bd4101f5058cdee7d0cf30234fe Mon Sep 17 00:00:00 2001
+Message-ID: <a99a93e5c9013bd4101f5058cdee7d0cf30234fe.1694554961.git.vivien@planete-kraus.eu>
+From: Jehan <jehan@girinstud.io>
+Date: Wed, 5 Jul 2023 21:18:19 +0200
+Subject: [PATCH] Issue #333: continuing to support librsvg 2.40.x (C
+ versions).
+
+Commit 9beeefcbe uses too new functions of librsvg. We could just bump
+the minimum required version but there are issues with Rust not being
+available on every platform yet. So instead, let's add some conditional
+code paths, so that it still builds with librsvg 2.40.x (which was the
+last versions fully in C) while we use newer code and no warnings when
+using newer versions.
+---
+ operations/external/svg-load.c | 25 ++++++++++++++++++++-----
+ 1 file changed, 20 insertions(+), 5 deletions(-)
+
+diff --git a/operations/external/svg-load.c b/operations/external/svg-load.c
+index 3312a0c0a..15c0b30b7 100644
+--- a/operations/external/svg-load.c
++++ b/operations/external/svg-load.c
+@@ -76,16 +76,25 @@ query_svg (GeglOperation *operation)
+ {
+   GeglProperties *o = GEGL_PROPERTIES (operation);
+   Priv *p = (Priv*) o->user_data;
++#if LIBRSVG_CHECK_VERSION(2, 52, 0)
+   gdouble out_width, out_height;
++#else
++  RsvgDimensionData dimensions;
++#endif
+ 
+   g_return_val_if_fail (p->handle != NULL, FALSE);
+ 
+-  rsvg_handle_get_intrinsic_size_in_pixels (p->handle, &out_width, &out_height);
+-
+   p->format = babl_format ("R'G'B'A u8");
+ 
++#if LIBRSVG_CHECK_VERSION(2, 52, 0)
++  rsvg_handle_get_intrinsic_size_in_pixels (p->handle, &out_width, &out_height);
+   p->height = out_height;
+-  p->width = out_width;
++  p->width  = out_width;
++#else
++  rsvg_handle_get_dimensions (p->handle, &dimensions);
++  p->height = dimensions.height;
++  p->width  = dimensions.width;
++#endif
+ 
+   return TRUE;
+ }
+@@ -98,10 +107,12 @@ load_svg (GeglOperation *operation,
+ {
+     GeglProperties    *o = GEGL_PROPERTIES (operation);
+     Priv              *p = (Priv*) o->user_data;
+-    RsvgRectangle      svg_rect = {0.0, 0.0, width, height};
+     cairo_surface_t   *surface;
+     cairo_t           *cr;
+-    GError            *error = NULL;
++#if LIBRSVG_CHECK_VERSION(2, 52, 0)
++    GError            *error    = NULL;
++    RsvgRectangle      svg_rect = {0.0, 0.0, width, height};
++#endif
+ 
+     g_return_val_if_fail (p->handle != NULL, -1);
+ 
+@@ -115,7 +126,11 @@ load_svg (GeglOperation *operation,
+                      (double)height / (double)p->height);
+       }
+ 
++#if LIBRSVG_CHECK_VERSION(2, 52, 0)
+     rsvg_handle_render_document (p->handle, cr, &svg_rect, &error);
++#else
++    rsvg_handle_render_cairo (p->handle, cr);
++#endif
+ 
+     cairo_surface_flush (surface);
+ 
+-- 
+2.41.0
+
