Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP2:GA
libgxps
libgxps-CVE-2018-10733.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File libgxps-CVE-2018-10733.patch of Package libgxps
diff --git a/libgxps/gxps-archive.c b/libgxps/gxps-archive.c index e763773..2851a65 100644 --- a/libgxps/gxps-archive.c +++ b/libgxps/gxps-archive.c @@ -406,9 +406,14 @@ 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 +428,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 +446,12 @@ 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; } @@ -507,17 +517,26 @@ gxps_archive_input_stream_read (GInputStream *stream, GError **error) { GXPSArchiveInputStream *istream = GXPS_ARCHIVE_INPUT_STREAM (stream); - gssize bytes_read; + gssize bytes_read; if (g_cancellable_set_error_if_cancelled (cancellable, error)) return -1; - bytes_read = archive_read_data (istream->zip->archive, buffer, count); - if (bytes_read == 0 && istream->is_interleaved && !gxps_archive_input_stream_is_last_piece (istream)) { - /* Read next piece */ - gxps_archive_input_stream_next_piece (istream); - bytes_read = gxps_archive_input_stream_read (stream, buffer, count, cancellable, error); - } + bytes_read = archive_read_data (istream->zip->archive, buffer, count); + + if (bytes_read < 0) { + g_set_error_literal(error, + G_IO_ERROR, + g_io_error_from_errno (archive_errno (istream->zip->archive)), + archive_error_string (istream->zip->archive)); + return -1; + } + + if (bytes_read == 0 && istream->is_interleaved && !gxps_archive_input_stream_is_last_piece (istream)) { + /* Read next piece */ + gxps_archive_input_stream_next_piece (istream); + bytes_read = gxps_archive_input_stream_read (stream, buffer, count, cancellable, error); + } return bytes_read; } diff --git a/libgxps/gxps-fonts.c b/libgxps/gxps-fonts.c index 882157d..13bf918 100644 --- a/libgxps/gxps-fonts.c +++ b/libgxps/gxps-fonts.c @@ -220,20 +220,16 @@ 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 98c7052..7f48dca 100644 --- a/libgxps/gxps-images.c +++ b/libgxps/gxps-images.c @@ -742,18 +742,14 @@ 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; _tiff_push_handlers ();
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor