diff --git a/gtk/gtkpicture.c b/gtk/gtkpicture.c
index 3dc7c9b91b..b6ecd2f696 100644
--- a/gtk/gtkpicture.c
+++ b/gtk/gtkpicture.c
@@ -604,6 +604,7 @@ load_scalable_with_loader (GFile *file,
out2:
g_bytes_unref (bytes);
out1:
+ gdk_pixbuf_loader_close (loader, NULL);
g_object_unref (loader);
return result;
@@ -637,7 +638,7 @@ gtk_picture_set_file (GtkPicture *self,
paintable = load_scalable_with_loader (file, gtk_widget_get_scale_factor (GTK_WIDGET (self)));
gtk_picture_set_paintable (self, paintable);
- g_object_unref (paintable);
+ g_clear_object (&paintable);
g_object_thaw_notify (G_OBJECT (self));
}
diff --git a/testsuite/reftests/meson.build b/testsuite/reftests/meson.build
index 3a1f9ac688..597939d6c0 100644
--- a/testsuite/reftests/meson.build
+++ b/testsuite/reftests/meson.build
@@ -328,6 +328,8 @@ testdata = [
'paned-undersized.css',
'paned-undersized.ref.ui',
'paned-undersized.ui',
+ 'picture-load-invalid-file.ui',
+ 'picture-load-invalid-file.ref.ui',
'pseudoclass-on-box.css',
'pseudoclass-on-box.ref.ui',
'pseudoclass-on-box.ui',
diff --git a/testsuite/reftests/picture-load-invalid-file.ref.ui b/testsuite/reftests/picture-load-invalid-file.ref.ui
new file mode 100644
index 0000000000..3500931a6b
--- /dev/null
+++ b/testsuite/reftests/picture-load-invalid-file.ref.ui
@@ -0,0 +1,11 @@
+
+
+
+
+
diff --git a/testsuite/reftests/picture-load-invalid-file.ui b/testsuite/reftests/picture-load-invalid-file.ui
new file mode 100644
index 0000000000..8ca26cfacf
--- /dev/null
+++ b/testsuite/reftests/picture-load-invalid-file.ui
@@ -0,0 +1,12 @@
+
+
+
+
+ popup
+
+
+ does://not.com/exist.png
+
+
+
+