[libgxps] gxps-archive: Ensure gxps_archive_read_entry() fills the GError in case of failure



commit b458226e162fe1ffe7acb4230c114a52ada5131b
Author: Carlos Garcia Campos <carlosgc gnome org>
Date:   Sat May 5 12:01:24 2018 +0200

    gxps-archive: Ensure gxps_archive_read_entry() fills the GError in case of failure
    
    And fix the callers to not overwrite the GError.

 libgxps/gxps-archive.c |   15 +++++++++++----
 libgxps/gxps-fonts.c   |   17 +++++------------
 libgxps/gxps-images.c  |   17 ++++++-----------
 3 files changed, 22 insertions(+), 27 deletions(-)
---
diff --git a/libgxps/gxps-archive.c b/libgxps/gxps-archive.c
index e763773..346ba73 100644
--- a/libgxps/gxps-archive.c
+++ b/libgxps/gxps-archive.c
@@ -406,9 +406,13 @@ gxps_archive_read_entry (GXPSArchive *archive,
        gboolean      retval;
 
        stream = gxps_archive_open (archive, path);
-       if (!stream)
-               /* TODO: Error */
+       if (!stream) {
+                g_set_error (error,
+                             G_IO_ERROR,
+                             G_IO_ERROR_NOT_FOUND,
+                             "The entry '%s' was not found in archive", path);
                return FALSE;
+        }
 
        entry_size = archive_entry_size (GXPS_ARCHIVE_INPUT_STREAM (stream)->entry);
        if (entry_size <= 0) {
@@ -423,7 +427,7 @@ gxps_archive_read_entry (GXPSArchive *archive,
                *buffer = g_malloc (buffer_size);
                do {
                        bytes = g_input_stream_read (stream, &buf, BUFFER_SIZE, NULL, error);
-                       if (*error != NULL) {
+                       if (bytes < 0) {
                                g_free (*buffer);
                                g_object_unref (stream);
 
@@ -441,7 +445,10 @@ gxps_archive_read_entry (GXPSArchive *archive,
                g_object_unref (stream);
 
                if (*bytes_read == 0) {
-                       /* TODO: Error */
+                        g_set_error (error,
+                                     G_IO_ERROR,
+                                     G_IO_ERROR_INVALID_DATA,
+                                     "The entry '%s' is empty in archive", path);
                        g_free (*buffer);
                        return FALSE;
                }
diff --git a/libgxps/gxps-fonts.c b/libgxps/gxps-fonts.c
index 882157d..8d02ffc 100644
--- a/libgxps/gxps-fonts.c
+++ b/libgxps/gxps-fonts.c
@@ -220,19 +220,12 @@ gxps_fonts_new_font_face (GXPSArchive *zip,
        cairo_font_face_t *font_face;
        guchar            *font_data;
        gsize              font_data_len;
-       gboolean           res;
 
-       res = gxps_archive_read_entry (zip, font_uri,
-                                      &font_data, &font_data_len,
-                                      error);
-       if (!res) {
-               g_set_error (error,
-                            GXPS_ERROR,
-                            GXPS_ERROR_SOURCE_NOT_FOUND,
-                            "Font source %s not found in archive",
-                            font_uri);
-               return NULL;
-       }
+        if (!gxps_archive_read_entry (zip, font_uri,
+                                      &font_data, &font_data_len,
+                                      error)) {
+                return NULL;
+        }
 
        ft_face.font_data = font_data;
        ft_face.font_data_len = (gssize)font_data_len;
diff --git a/libgxps/gxps-images.c b/libgxps/gxps-images.c
index 4dcf9e2..50f899f 100644
--- a/libgxps/gxps-images.c
+++ b/libgxps/gxps-images.c
@@ -742,17 +742,12 @@ gxps_images_create_from_tiff (GXPSArchive *zip,
        guchar     *data;
        guchar     *p;
 
-       if (!gxps_archive_read_entry (zip, image_uri,
-                                     &buffer.buffer,
-                                     &buffer.buffer_len,
-                                     error)) {
-               g_set_error (error,
-                            GXPS_ERROR,
-                            GXPS_ERROR_SOURCE_NOT_FOUND,
-                            "Image source %s not found in archive",
-                            image_uri);
-               return NULL;
-       }
+        if (!gxps_archive_read_entry (zip, image_uri,
+                                      &buffer.buffer,
+                                      &buffer.buffer_len,
+                                      error)) {
+                return NULL;
+        }
 
        buffer.pos = 0;
 


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