]> git.eshelyaron.com Git - emacs.git/commitdiff
Display librsvg error when loading bad SVG
authorStefan Kangas <stefankangas@gmail.com>
Fri, 9 Sep 2022 00:32:08 +0000 (02:32 +0200)
committerStefan Kangas <stefankangas@gmail.com>
Fri, 9 Sep 2022 01:07:44 +0000 (03:07 +0200)
* 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.

src/image.c
test/manual/image-tests.el

index f5004c2c4c778f4fd1800e5b60a89cfee256ae73..549fe30ef7c1f1b62e9cc9f956d456aa7105a90c 100644 (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) */
index 2565ff29c9bd36cc804a66f65312b1a2a640d689..c726845bd3bdc3a31a1fec4f7fdc04761b56da6b 100644 (file)
 (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)))))
+
 \f
 ;;;; image-test-size