commit f16e5e8855d6312c257b544c7c6c8d1d509eac16 Author: overweight <5324761+overweight@user.noreply.gitee.com> Date: Mon Sep 30 10:56:31 2019 -0400 Package init diff --git a/libgxps-0.3.0.tar.xz b/libgxps-0.3.0.tar.xz new file mode 100644 index 0000000..1cb24ba Binary files /dev/null and b/libgxps-0.3.0.tar.xz differ diff --git a/libgxps-overflow.patch b/libgxps-overflow.patch new file mode 100644 index 0000000..abc4d26 --- /dev/null +++ b/libgxps-overflow.patch @@ -0,0 +1,19 @@ +commit 123dd99c6a1ae2ef6fcb5547e51fa58e8c954b51 +Author: Carlos Garcia Campos +Date: Fri Dec 8 11:11:38 2017 +0100 + + gxps-images: fix integer overflow in png decoder + +diff --git a/libgxps/gxps-images.c b/libgxps/gxps-images.c +index 98c7052..19cb1c0 100644 +--- a/libgxps/gxps-images.c ++++ b/libgxps/gxps-images.c +@@ -286,7 +286,7 @@ gxps_images_create_from_png (GXPSArchive *zip, + } + + stride = cairo_format_stride_for_width (format, png_width); +- if (stride < 0) { ++ if (stride < 0 || png_height >= INT_MAX / stride) { + fill_png_error (error, image_uri, NULL); + g_object_unref (stream); + png_destroy_read_struct (&png, &info, NULL); diff --git a/libgxps-readerror1.patch b/libgxps-readerror1.patch new file mode 100644 index 0000000..2d8cc27 --- /dev/null +++ b/libgxps-readerror1.patch @@ -0,0 +1,106 @@ +commit b458226e162fe1ffe7acb4230c114a52ada5131b +Author: Carlos Garcia Campos +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. + +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; + diff --git a/libgxps-readerror2.patch b/libgxps-readerror2.patch new file mode 100644 index 0000000..13490ec --- /dev/null +++ b/libgxps-readerror2.patch @@ -0,0 +1,24 @@ +commit 133fe2a96e020d4ca65c6f64fb28a404050ebbfd +Author: Carlos Garcia Campos +Date: Sat May 5 12:02:36 2018 +0200 + + gxps-archive: Handle errors returned by archive_read_data + +diff --git a/libgxps/gxps-archive.c b/libgxps/gxps-archive.c +index 346ba73..1bae729 100644 +--- a/libgxps/gxps-archive.c ++++ b/libgxps/gxps-archive.c +@@ -520,6 +520,13 @@ gxps_archive_input_stream_read (GInputStream *stream, + return -1; + + 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); diff --git a/libgxps.spec b/libgxps.spec new file mode 100644 index 0000000..a30b6cd --- /dev/null +++ b/libgxps.spec @@ -0,0 +1,65 @@ +Name: libgxps +Version: 0.3.0 +Release: 7 +Summary: Library for rendering XPS documentsLibrary for rendering XPS documents +License: LGPLv2+ +URL: https://live.gnome.org/libgxps +Source0: https://download.gnome.org/sources/libgxps/0.3/%{name}-%{version}.tar.xz +# https://bugzilla.redhat.com/show_bug.cgi?id=1591132 +Patch0: libgxps-overflow.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=1574844 +Patch1: libgxps-readerror1.patch +Patch2: libgxps-readerror2.patch +BuildRequires: meson gtk3-devel gcc glib2-devel gobject-introspection-devel libtiff-devel +BuildRequires: gtk-doc cairo-devel libarchive-devel freetype-devel libjpeg-devel lcms2-devel +Provides: %{name}-tools +Obsoletes: %{name}-tools + +%description +libgxps is a GObject based library for handling and rendering XPS +documents. + +%package devel +Summary: Development files and Header files for %{name} +Requires: %{name} = %{version}-%{release} + +%description devel +The %{name}-devel package contains libraries and header files for +developing applications that use %{name}. + +%package_help + +%prep +%autosetup -p1 + +%build +%meson -Denable-gtk-doc=true -Denable-man=true +%meson_build + +%install +%meson_install + +%files +%defattr(-,root,root) +%doc AUTHORS +%license COPYING MAINTAINERS +%{_bindir}/xpsto* +%{_libdir}/libgxps.so.* +%{_libdir}/girepository-1.0/GXPS-0.1.typelib + +%files devel +%defattr(-,root,root) +%{_libdir}/libgxps.so +%{_libdir}/pkgconfig/libgxps.pc +%{_includedir}/libgxps/*.h +%{_datadir}/gir-1.0/GXPS-0.1.gir + +%files help +%defattr(-,root,root) +%doc NEWS README TODO +%{_mandir}/man1/xpsto*.1.gz +%{_datadir}/gtk-doc/html/* + +%changelog +* Thu Sep 5 2019 openEuler Buildteam - 0.3.0-7 +- Package init