Display librsvg error when loading bad SVG

* src/image.c (svg_load_image): Display the error message from librsvg
when parsing a bad SVG image file.
* test/manual/image-tests.el
(image-tests-load-image/svg-invalid): New test.
This commit is contained in:
Stefan Kangas 2022-09-09 02:32:08 +02:00
parent ef17ba8370
commit 816106b7e6
2 changed files with 18 additions and 7 deletions

View file

@ -1,6 +1,6 @@
/* Functions for image support on window system.
Copyright (C) 1989, 1992-2022 Free Software Foundation, Inc.
Copyright (C) 1989-2022 Free Software Foundation, Inc.
This file is part of GNU Emacs.
@ -11491,7 +11491,7 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
if (!image_create_x_image_and_pixmap (f, img, width, height, 0, &ximg, 0))
{
g_object_unref (pixbuf);
return 0;
return false;
}
init_color_table ();
@ -11536,7 +11536,7 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
image_put_x_image (f, img, ximg, 0);
}
return 1;
return true;
rsvg_error:
if (rsvg_handle)
@ -11547,11 +11547,11 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
if (css && !STRINGP (lcss))
xfree (css);
#endif
/* FIXME: Use error->message so the user knows what is the actual
problem with the image. */
image_error ("Error parsing SVG image");
image_error ("Error parsing SVG image: %s",
/* The -1 removes an extra newline. */
make_string (err->message, strlen (err->message) - 1));
g_clear_error (&err);
return 0;
return false;
}
#endif /* defined (HAVE_RSVG) */

View file

@ -78,6 +78,17 @@
(image-tests-make-load-image-test 'xbm)
(image-tests-make-load-image-test 'xpm)
(ert-deftest image-tests-load-image/svg-invalid ()
(with-temp-buffer
(pop-to-buffer (current-buffer))
(insert (propertize " "
'display '(image :data
"invalid foo bar"
:type svg)))
(redisplay))
(with-current-buffer "*Messages*"
(should (string-search "XML parse error" (buffer-string)))))
;;;; image-test-size