Blame SOURCES/libgxps-0.3.0-archive-fill-error.patch

e4b13e
From b458226e162fe1ffe7acb4230c114a52ada5131b Mon Sep 17 00:00:00 2001
e4b13e
From: Carlos Garcia Campos <carlosgc@gnome.org>
e4b13e
Date: Sat, 5 May 2018 12:01:24 +0200
e4b13e
Subject: [PATCH 1/2] gxps-archive: Ensure gxps_archive_read_entry() fills the
e4b13e
 GError in case of failure
e4b13e
e4b13e
And fix the callers to not overwrite the GError.
e4b13e
---
e4b13e
 libgxps/gxps-archive.c | 15 +++++++++++----
e4b13e
 libgxps/gxps-fonts.c   | 17 +++++------------
e4b13e
 libgxps/gxps-images.c  | 17 ++++++-----------
e4b13e
 3 files changed, 22 insertions(+), 27 deletions(-)
e4b13e
e4b13e
diff --git a/libgxps/gxps-archive.c b/libgxps/gxps-archive.c
e4b13e
index e763773..346ba73 100644
e4b13e
--- a/libgxps/gxps-archive.c
e4b13e
+++ b/libgxps/gxps-archive.c
e4b13e
@@ -406,9 +406,13 @@ gxps_archive_read_entry (GXPSArchive *archive,
e4b13e
 	gboolean      retval;
e4b13e
 
e4b13e
 	stream = gxps_archive_open (archive, path);
e4b13e
-	if (!stream)
e4b13e
-		/* TODO: Error */
e4b13e
+	if (!stream) {
e4b13e
+                g_set_error (error,
e4b13e
+                             G_IO_ERROR,
e4b13e
+                             G_IO_ERROR_NOT_FOUND,
e4b13e
+                             "The entry '%s' was not found in archive", path);
e4b13e
 		return FALSE;
e4b13e
+        }
e4b13e
 
e4b13e
 	entry_size = archive_entry_size (GXPS_ARCHIVE_INPUT_STREAM (stream)->entry);
e4b13e
 	if (entry_size <= 0) {
e4b13e
@@ -423,7 +427,7 @@ gxps_archive_read_entry (GXPSArchive *archive,
e4b13e
 		*buffer = g_malloc (buffer_size);
e4b13e
 		do {
e4b13e
 			bytes = g_input_stream_read (stream, &buf, BUFFER_SIZE, NULL, error);
e4b13e
-			if (*error != NULL) {
e4b13e
+			if (bytes < 0) {
e4b13e
 				g_free (*buffer);
e4b13e
 				g_object_unref (stream);
e4b13e
 
e4b13e
@@ -441,7 +445,10 @@ gxps_archive_read_entry (GXPSArchive *archive,
e4b13e
 		g_object_unref (stream);
e4b13e
 
e4b13e
 		if (*bytes_read == 0) {
e4b13e
-			/* TODO: Error */
e4b13e
+                        g_set_error (error,
e4b13e
+                                     G_IO_ERROR,
e4b13e
+                                     G_IO_ERROR_INVALID_DATA,
e4b13e
+                                     "The entry '%s' is empty in archive", path);
e4b13e
 			g_free (*buffer);
e4b13e
 			return FALSE;
e4b13e
 		}
e4b13e
diff --git a/libgxps/gxps-fonts.c b/libgxps/gxps-fonts.c
e4b13e
index 882157d..8d02ffc 100644
e4b13e
--- a/libgxps/gxps-fonts.c
e4b13e
+++ b/libgxps/gxps-fonts.c
e4b13e
@@ -220,19 +220,12 @@ gxps_fonts_new_font_face (GXPSArchive *zip,
e4b13e
 	cairo_font_face_t *font_face;
e4b13e
 	guchar            *font_data;
e4b13e
 	gsize              font_data_len;
e4b13e
-	gboolean           res;
e4b13e
 
e4b13e
-	res = gxps_archive_read_entry (zip, font_uri,
e4b13e
-				       &font_data, &font_data_len,
e4b13e
-				       error);
e4b13e
-	if (!res) {
e4b13e
-		g_set_error (error,
e4b13e
-			     GXPS_ERROR,
e4b13e
-			     GXPS_ERROR_SOURCE_NOT_FOUND,
e4b13e
-			     "Font source %s not found in archive",
e4b13e
-			     font_uri);
e4b13e
-		return NULL;
e4b13e
-	}
e4b13e
+        if (!gxps_archive_read_entry (zip, font_uri,
e4b13e
+                                      &font_data, &font_data_len,
e4b13e
+                                      error)) {
e4b13e
+                return NULL;
e4b13e
+        }
e4b13e
 
e4b13e
 	ft_face.font_data = font_data;
e4b13e
 	ft_face.font_data_len = (gssize)font_data_len;
e4b13e
diff --git a/libgxps/gxps-images.c b/libgxps/gxps-images.c
e4b13e
index 4dcf9e2..50f899f 100644
e4b13e
--- a/libgxps/gxps-images.c
e4b13e
+++ b/libgxps/gxps-images.c
e4b13e
@@ -742,17 +742,12 @@ gxps_images_create_from_tiff (GXPSArchive *zip,
e4b13e
 	guchar     *data;
e4b13e
 	guchar     *p;
e4b13e
 
e4b13e
-	if (!gxps_archive_read_entry (zip, image_uri,
e4b13e
-				      &buffer.buffer,
e4b13e
-				      &buffer.buffer_len,
e4b13e
-				      error)) {
e4b13e
-		g_set_error (error,
e4b13e
-			     GXPS_ERROR,
e4b13e
-			     GXPS_ERROR_SOURCE_NOT_FOUND,
e4b13e
-			     "Image source %s not found in archive",
e4b13e
-			     image_uri);
e4b13e
-		return NULL;
e4b13e
-	}
e4b13e
+        if (!gxps_archive_read_entry (zip, image_uri,
e4b13e
+                                      &buffer.buffer,
e4b13e
+                                      &buffer.buffer_len,
e4b13e
+                                      error)) {
e4b13e
+                return NULL;
e4b13e
+        }
e4b13e
 
e4b13e
 	buffer.pos = 0;
e4b13e
 
e4b13e
-- 
e4b13e
2.17.1
e4b13e