|
|
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 |
|