You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
3.4 KiB
106 lines
3.4 KiB
From b458226e162fe1ffe7acb4230c114a52ada5131b Mon Sep 17 00:00:00 2001 |
|
From: Carlos Garcia Campos <carlosgc@gnome.org> |
|
Date: Sat, 5 May 2018 12:01:24 +0200 |
|
Subject: gxps-archive: Ensure gxps_archive_read_entry() fills the GError in |
|
case of failure |
|
|
|
And fix the callers to not overwrite the GError. |
|
|
|
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; |
|
|
|
|