X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=backend%2Ftiff%2Ftiff-document.c;h=7f10c9ab7496b6edfdbd0e9244eacce26bdbea34;hb=776a6fe02961d8901d21e172633d3c8d1c85dc93;hp=6969a1bdfc2e08f70c88f6094ef34aa4344e0ade;hpb=96ee76c82cc04f84631bc396ec9c7284a49ac727;p=evince.git diff --git a/backend/tiff/tiff-document.c b/backend/tiff/tiff-document.c index 6969a1bd..7f10c9ab 100644 --- a/backend/tiff/tiff-document.c +++ b/backend/tiff/tiff-document.c @@ -91,13 +91,11 @@ tiff_document_load (EvDocument *document, gchar *filename; TIFF *tiff; - push_handlers (); filename = g_filename_from_uri (uri, NULL, error); - if (!filename) { - pop_handlers (); + if (!filename) return FALSE; - } + push_handlers (); tiff = TIFFOpen (filename, "r"); if (tiff) { guint32 w, h; @@ -109,6 +107,13 @@ tiff_document_load (EvDocument *document, if (!tiff) { pop_handlers (); + + g_set_error_literal (error, + EV_DOCUMENT_ERROR, + EV_DOCUMENT_ERROR_INVALID, + _("Invalid document")); + + g_free (filename); return FALSE; } @@ -255,10 +260,10 @@ tiff_document_render (EvDocument *document, rowstride = cairo_format_stride_for_width (CAIRO_FORMAT_RGB24, width); #else rowstride = width * 4; +#endif if (rowstride / 4 != width) - /* overflow */ + /* overflow, or cairo was changed in an unsupported way */ return NULL; -#endif bytes = height * rowstride; if (bytes / rowstride != height) @@ -287,16 +292,15 @@ tiff_document_render (EvDocument *document, */ p = pixels; while (p < pixels + bytes) { - uint32 pixel = *(uint32 *)p; - int r = TIFFGetR(pixel); - int g = TIFFGetG(pixel); - int b = TIFFGetB(pixel); - int a = TIFFGetA(pixel); - - *p++ = b; - *p++ = g; - *p++ = r; - *p++ = a; + guint32 *pixel = (guint32*)p; + guint8 r = TIFFGetR(*pixel); + guint8 g = TIFFGetG(*pixel); + guint8 b = TIFFGetB(*pixel); + guint8 a = TIFFGetA(*pixel); + + *pixel = (a << 24) | (r << 16) | (g << 8) | b; + + p += 4; } rotated_surface = ev_document_misc_surface_rotate_and_scale (surface,