aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fiv-io.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/fiv-io.c b/fiv-io.c
index 4189917..b9ca4f1 100644
--- a/fiv-io.c
+++ b/fiv-io.c
@@ -2517,21 +2517,25 @@ fiv_io_open_from_data(const char *data, size_t len, const gchar *uri,
g_clear_error(error);
}
#endif // HAVE_LIBTIFF --------------------------------------------------------
-#ifdef HAVE_GDKPIXBUF // ------------------------------------------------------
- // This is only used as a last resort, the rest above is special-cased.
- if ((surface = open_gdkpixbuf(data, len, profile, error)))
- break;
- if (error && (*error)->code != GDK_PIXBUF_ERROR_UNKNOWN_TYPE)
- break;
- if (error) {
- g_debug("%s", (*error)->message);
+ set_error(error, "unsupported file type");
+ }
+
+#ifdef HAVE_GDKPIXBUF // ------------------------------------------------------
+ // This is used as a last resort, the rest above is special-cased.
+ // Wuffs #71 and similar concerns make us default to it in all cases.
+ if (!surface) {
+ GError *err = NULL;
+ if ((surface = open_gdkpixbuf(data, len, profile, &err))) {
+ g_clear_error(error);
+ } else if (err->code == GDK_PIXBUF_ERROR_UNKNOWN_TYPE) {
+ g_error_free(err);
+ } else {
g_clear_error(error);
+ g_propagate_error(error, err);
}
-#endif // HAVE_GDKPIXBUF ------------------------------------------------------
-
- set_error(error, "unsupported file type");
}
+#endif // HAVE_GDKPIXBUF ------------------------------------------------------
// gdk-pixbuf only gives out this single field--cater to its limitations,
// since we'd really like to have it.