[evince/gnome-3-30] tiff: Handle failure from TIFFReadRGBAImageOriented



commit 70334b28f5a6735e0284666844ad6914568e4941
Author: Jason Crain <jcrain src gnome org>
Date:   Mon Apr 15 23:06:36 2019 -0600

    tiff: Handle failure from TIFFReadRGBAImageOriented
    
    The TIFFReadRGBAImageOriented function returns zero if it was unable to
    read the image. Return NULL in this case instead of displaying
    uninitialized memory.
    
    Fixes #1129

 backend/tiff/tiff-document.c | 28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)
---
diff --git a/backend/tiff/tiff-document.c b/backend/tiff/tiff-document.c
index 7715031b..38bb3bd8 100644
--- a/backend/tiff/tiff-document.c
+++ b/backend/tiff/tiff-document.c
@@ -292,18 +292,22 @@ tiff_document_render (EvDocument      *document,
                g_warning("Failed to allocate memory for rendering.");
                return NULL;
        }
-       
+
+       if (!TIFFReadRGBAImageOriented (tiff_document->tiff,
+                                       width, height,
+                                       (uint32 *)pixels,
+                                       orientation, 0)) {
+               g_warning ("Failed to read TIFF image.");
+               g_free (pixels);
+               return NULL;
+       }
+
        surface = cairo_image_surface_create_for_data (pixels,
                                                       CAIRO_FORMAT_RGB24,
                                                       width, height,
                                                       rowstride);
        cairo_surface_set_user_data (surface, &key,
                                     pixels, (cairo_destroy_func_t)g_free);
-
-       TIFFReadRGBAImageOriented (tiff_document->tiff,
-                                  width, height,
-                                  (uint32 *)pixels,
-                                  orientation, 0);
        pop_handlers ();
 
        /* Convert the format returned by libtiff to
@@ -384,13 +388,17 @@ tiff_document_get_thumbnail (EvDocument      *document,
        if (!pixels)
                return NULL;
        
+       if (!TIFFReadRGBAImageOriented (tiff_document->tiff,
+                                       width, height,
+                                       (uint32 *)pixels,
+                                       ORIENTATION_TOPLEFT, 0)) {
+               g_free (pixels);
+               return NULL;
+       }
+
        pixbuf = gdk_pixbuf_new_from_data (pixels, GDK_COLORSPACE_RGB, TRUE, 8, 
                                           width, height, rowstride,
                                           (GdkPixbufDestroyNotify) g_free, NULL);
-       TIFFReadRGBAImageOriented (tiff_document->tiff,
-                                  width, height,
-                                  (uint32 *)pixels,
-                                  ORIENTATION_TOPLEFT, 0);
        pop_handlers ();
 
        ev_render_context_compute_scaled_size (rc, width, height * (x_res / y_res),


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]