Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libXpm for openSUSE:Factory checked in at 2023-01-18 13:08:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libXpm (Old) and /work/SRC/openSUSE:Factory/.libXpm.new.32243 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libXpm" Wed Jan 18 13:08:38 2023 rev:12 rq:1059036 version:3.5.14 Changes: -------- --- /work/SRC/openSUSE:Factory/libXpm/libXpm.changes 2022-11-22 16:09:22.793785261 +0100 +++ /work/SRC/openSUSE:Factory/.libXpm.new.32243/libXpm.changes 2023-01-18 13:08:41.804083039 +0100 @@ -1,0 +2,19 @@ +Wed Jan 11 13:49:26 UTC 2023 - Stefan Dirsch <sndir...@suse.com> + +- U_0001-configure-add-disable-open-zfile-instead-of-requirin.patch + * needed by U_0005-Fix-CVE-2022-4883-compression-commands-depend-on-PAT.patch +- U_0002-Fix-CVE-2022-46285-Infinite-loop-on-unclosed-comment.patch + * libXpm: Infinite loop on unclosed comments (CVE-2022-46285, + bsc#1207029) +- U_0004-Fix-CVE-2022-44617-Runaway-loop-with-width-of-0-and-.patch + * libXpm: Runaway loop on width of 0 and enormous height + (CVE-2022-44617, bsc#1207030) +- U_0005-Fix-CVE-2022-4883-compression-commands-depend-on-PAT.patch + * libXpm: compression commands depend on $PATH (CVE-2022-4883, + bsc#1207031) +- U_regression-bug1207029_1207030_1207031.patch + * regression fix for above patches +- U_regression2-bug1207029_1207030_1207031.patch + * second regression fix: Use gzip -d instead of gunzip + +------------------------------------------------------------------- New: ---- U_0001-configure-add-disable-open-zfile-instead-of-requirin.patch U_0002-Fix-CVE-2022-46285-Infinite-loop-on-unclosed-comment.patch U_0004-Fix-CVE-2022-44617-Runaway-loop-with-width-of-0-and-.patch U_0005-Fix-CVE-2022-4883-compression-commands-depend-on-PAT.patch U_regression-bug1207029_1207030_1207031.patch U_regression2-bug1207029_1207030_1207031.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libXpm.spec ++++++ --- /var/tmp/diff_new_pack.FuWqNf/_old 2023-01-18 13:08:42.416086551 +0100 +++ /var/tmp/diff_new_pack.FuWqNf/_new 2023-01-18 13:08:42.420086575 +0100 @@ -1,7 +1,7 @@ # # spec file for package libXpm # -# Copyright (c) 2022 SUSE LLC +# Copyright (c) 2023 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -29,9 +29,19 @@ #Git-Web: http://cgit.freedesktop.org/xorg/lib/libXpm/ Source: http://xorg.freedesktop.org/releases/individual/lib/%{name}-%{version}.tar.xz Source1: baselibs.conf +Patch1207001: U_0001-configure-add-disable-open-zfile-instead-of-requirin.patch +Patch1207029: U_0002-Fix-CVE-2022-46285-Infinite-loop-on-unclosed-comment.patch +Patch1207030: U_0004-Fix-CVE-2022-44617-Runaway-loop-with-width-of-0-and-.patch +Patch1207031: U_0005-Fix-CVE-2022-4883-compression-commands-depend-on-PAT.patch +Patch1207129: U_regression-bug1207029_1207030_1207031.patch +Patch1207130: U_regression2-bug1207029_1207030_1207031.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build #git#BuildRequires: autoconf >= 2.60, automake, libtool BuildRequires: pkgconfig +BuildRequires: autoconf +BuildRequires: automake +BuildRequires: gzip +BuildRequires: libtool BuildRequires: pkgconfig(x11) BuildRequires: pkgconfig(xext) BuildRequires: pkgconfig(xextproto) @@ -80,8 +90,15 @@ %prep %setup -q +%patch1207001 -p1 +%patch1207029 -p1 +%patch1207030 -p1 +%patch1207031 -p1 +%patch1207129 -p1 +%patch1207130 -p1 %build +autoreconf -fi %configure --disable-static make %{?_smp_mflags} ++++++ U_0001-configure-add-disable-open-zfile-instead-of-requirin.patch ++++++ >From 4841039e5385f264d12757903894f47c64f59361 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith <alan.coopersm...@oracle.com> Date: Thu, 5 Jan 2023 15:42:36 -0800 Subject: [PATCH] configure: add --disable-open-zfile instead of requiring -DNO_ZPIPE Documents the two compression options in the README, makes their configure options reflect the interdependency of their implementation, and makes the configure script report their configuration. Signed-off-by: Alan Coopersmith <alan.coopersm...@oracle.com> --- README.md | 15 +++++++++++++++ configure.ac | 36 +++++++++++++++++++++++------------- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index adc83c8..7895350 100644 --- a/README.md +++ b/README.md @@ -16,3 +16,18 @@ For patch submission instructions, see: https://www.x.org/wiki/Development/Documentation/SubmittingPatches +------------------------------------------------------------------------------ + +libXpm supports two optional features to handle compressed pixmap files. + +--enable-open-zfile makes libXpm recognize file names ending in .Z and .gz +and open a pipe to the appropriate command to compress the file when writing +and uncompress the file when reading. This is enabled by default on platforms +other than MinGW and can be disabled by passing the --disable-open-zfile flag +to the configure script. + +--enable-stat-zfile make libXpm search for a file name with .Z or .gz added +if it can't find the file it was asked to open. It relies on the +--enable-open-zfile feature to open the file, and is enabled by default +when --enable-open-zfile is enabled, and can be disabled by passing the +--disable-stat-zfile flag to the configure script. diff --git a/configure.ac b/configure.ac index 789a96e..1b64830 100644 --- a/configure.ac +++ b/configure.ac @@ -49,25 +49,35 @@ if test "x$USE_GETTEXT" = "xyes" ; then fi AM_CONDITIONAL(USE_GETTEXT, test "x$USE_GETTEXT" = "xyes") +# Optional feature: When a filename ending in .Z or .gz is requested, +# open a pipe to a newly forked compress/uncompress/gzip/gunzip command to +# handle it. +AC_MSG_CHECKING([whether to handle compressed pixmaps]) +case $host_os in + *mingw*) zpipe_default="no" ;; + *) zpipe_default="yes" ;; +esac +AC_ARG_ENABLE(open-zfile, + AS_HELP_STRING([--enable-open-zfile], + [Search for files with .Z & .gz extensions automatically @<:@default=auto@:>@]), + [OPEN_ZFILE=$enableval], [OPEN_ZFILE=yes]) +AC_MSG_RESULT([$OPEN_ZFILE]) +if test x$OPEN_ZFILE = xno ; then + AC_DEFINE(NO_ZPIPE, 1, [Define to 1 to disable decompression via pipes]) +fi + # Optional feature: When ___.xpm is requested, also look for ___.xpm.Z & .gz # Replaces ZFILEDEF = -DSTAT_ZFILE in old Imakefile +AC_MSG_CHECKING([whether to search for compressed pixmaps]) AC_ARG_ENABLE(stat-zfile, - AS_HELP_STRING([--enable-stat-zfile], - [Search for files with .Z & .gz extensions automatically @<:@default=yes@:>@]), - [STAT_ZFILE=$enableval], [STAT_ZFILE=yes]) + AS_HELP_STRING([--enable-stat-zfile], + [Search for files with .Z & .gz extensions automatically @<:@default=auto@:>@]), + [STAT_ZFILE=$enableval], [STAT_ZFILE=$OPEN_ZFILE]) +AC_MSG_RESULT([$STAT_ZFILE]) if test x$STAT_ZFILE = xyes ; then - AC_DEFINE(STAT_ZFILE, 1, [Define to 1 to automatically look for files with .Z & .gz extensions]) + AC_DEFINE(STAT_ZFILE, 1, [Define to 1 to automatically look for files with .Z & .gz extensions]) fi - -case $host_os in - *mingw*) - AC_DEFINE(NO_ZPIPE, 1, [Define to 1 to disable decompression via pipes]) - ;; - *) - ;; -esac - AC_CONFIG_FILES([Makefile doc/Makefile include/Makefile -- 2.35.3 ++++++ U_0002-Fix-CVE-2022-46285-Infinite-loop-on-unclosed-comment.patch ++++++ >From 4636007dd4cebca8ee10738a7833f629d8687529 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith <alan.coopersm...@oracle.com> Date: Sat, 17 Dec 2022 12:23:45 -0800 Subject: [PATCH libXpm 2/5] Fix CVE-2022-46285: Infinite loop on unclosed comments When reading XPM images from a file with libXpm 3.5.14 or older, if a comment in the file is not closed (i.e. a C-style comment starts with "/*" and is missing the closing "*/"), the ParseComment() function will loop forever calling getc() to try to read the rest of the comment, failing to notice that it has returned EOF, which may cause a denial of service to the calling program. Reported-by: Marco Ivaldi <rap...@0xdeadbeef.info> Signed-off-by: Alan Coopersmith <alan.coopersm...@oracle.com> --- src/data.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/data.c b/src/data.c index 898889c..bfad4ff 100644 --- a/src/data.c +++ b/src/data.c @@ -174,6 +174,10 @@ ParseComment(xpmData *data) notend = 0; Ungetc(data, *s, file); } + else if (c == EOF) { + /* hit end of file before the end of the comment */ + return XpmFileInvalid; + } } return 0; } -- 2.15.2 ++++++ U_0004-Fix-CVE-2022-44617-Runaway-loop-with-width-of-0-and-.patch ++++++ >From 198839ca64dc117b35339f38c83d483ab6b561b6 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith <alan.coopersm...@oracle.com> Date: Sat, 7 Jan 2023 12:44:28 -0800 Subject: [PATCH libXpm 4/5] Fix CVE-2022-44617: Runaway loop with width of 0 and enormous height When reading XPM images from a file with libXpm 3.5.14 or older, if a image has a width of 0 and a very large height, the ParsePixels() function will loop over the entire height calling getc() and ungetc() repeatedly, or in some circumstances, may loop seemingly forever, which may cause a denial of service to the calling program when given a small crafted XPM file to parse. Closes: #2 Reported-by: Martin Ettl <ettl.marti...@googlemail.com> Signed-off-by: Alan Coopersmith <alan.coopersm...@oracle.com> --- src/data.c | 20 ++++++++++++++------ src/parse.c | 31 +++++++++++++++++++++++++++---- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/src/data.c b/src/data.c index bfad4ff..7524e65 100644 --- a/src/data.c +++ b/src/data.c @@ -195,19 +195,23 @@ xpmNextString(xpmData *data) register char c; /* get to the end of the current string */ - if (data->Eos) - while ((c = *data->cptr++) && c != data->Eos); + if (data->Eos) { + while ((c = *data->cptr++) && c != data->Eos && c != '\0'); + + if (c == '\0') + return XpmFileInvalid; + } /* * then get to the beginning of the next string looking for possible * comment */ if (data->Bos) { - while ((c = *data->cptr++) && c != data->Bos) + while ((c = *data->cptr++) && c != data->Bos && c != '\0') if (data->Bcmt && c == data->Bcmt[0]) ParseComment(data); } else if (data->Bcmt) { /* XPM2 natural */ - while ((c = *data->cptr++) == data->Bcmt[0]) + while (((c = *data->cptr++) == data->Bcmt[0]) && c != '\0') ParseComment(data); data->cptr--; } @@ -216,9 +220,13 @@ xpmNextString(xpmData *data) FILE *file = data->stream.file; /* get to the end of the current string */ - if (data->Eos) + if (data->Eos) { while ((c = Getc(data, file)) != data->Eos && c != EOF); + if (c == EOF) + return XpmFileInvalid; + } + /* * then get to the beginning of the next string looking for possible * comment @@ -234,7 +242,7 @@ xpmNextString(xpmData *data) Ungetc(data, c, file); } } - return 0; + return XpmSuccess; } diff --git a/src/parse.c b/src/parse.c index 037fc66..64f51ba 100644 --- a/src/parse.c +++ b/src/parse.c @@ -427,6 +427,13 @@ ParsePixels( { unsigned int *iptr, *iptr2 = NULL; /* found by Egbert Eich */ unsigned int a, x, y; + int ErrorStatus; + + if ((width == 0) && (height != 0)) + return (XpmFileInvalid); + + if ((height == 0) && (width != 0)) + return (XpmFileInvalid); if ((height > 0 && width >= UINT_MAX / height) || width * height >= UINT_MAX / sizeof(unsigned int)) @@ -464,7 +471,11 @@ ParsePixels( colidx[(unsigned char)colorTable[a].string[0]] = a + 1; for (y = 0; y < height; y++) { - xpmNextString(data); + ErrorStatus = xpmNextString(data); + if (ErrorStatus != XpmSuccess) { + XpmFree(iptr2); + return (ErrorStatus); + } for (x = 0; x < width; x++, iptr++) { int c = xpmGetC(data); @@ -511,7 +522,11 @@ do \ } for (y = 0; y < height; y++) { - xpmNextString(data); + ErrorStatus = xpmNextString(data); + if (ErrorStatus != XpmSuccess) { + XpmFree(iptr2); + return (ErrorStatus); + } for (x = 0; x < width; x++, iptr++) { int cc1 = xpmGetC(data); if (cc1 > 0 && cc1 < 256) { @@ -551,7 +566,11 @@ do \ xpmHashAtom *slot; for (y = 0; y < height; y++) { - xpmNextString(data); + ErrorStatus = xpmNextString(data); + if (ErrorStatus != XpmSuccess) { + XpmFree(iptr2); + return (ErrorStatus); + } for (x = 0; x < width; x++, iptr++) { for (a = 0, s = buf; a < cpp; a++, s++) { int c = xpmGetC(data); @@ -571,7 +590,11 @@ do \ } } else { for (y = 0; y < height; y++) { - xpmNextString(data); + ErrorStatus = xpmNextString(data); + if (ErrorStatus != XpmSuccess) { + XpmFree(iptr2); + return (ErrorStatus); + } for (x = 0; x < width; x++, iptr++) { for (a = 0, s = buf; a < cpp; a++, s++) { int c = xpmGetC(data); -- 2.15.2 ++++++ U_0005-Fix-CVE-2022-4883-compression-commands-depend-on-PAT.patch ++++++ >From 082a080672c3b8a964aa8100bee41930e12b03fa Mon Sep 17 00:00:00 2001 From: Alan Coopersmith <alan.coopersm...@oracle.com> Date: Fri, 6 Jan 2023 12:50:48 -0800 Subject: [PATCH libXpm 5/5] Fix CVE-2022-4883: compression commands depend on $PATH By default, on all platforms except MinGW, libXpm will detect if a filename ends in .Z or .gz, and will when reading such a file fork off an uncompress or gunzip command to read from via a pipe, and when writing such a file will fork off a compress or gzip command to write to via a pipe. In libXpm 3.5.14 or older these are run via execlp(), relying on $PATH to find the commands. If libXpm is called from a program running with raised privileges, such as via setuid, then a malicious user could set $PATH to include programs of their choosing to be run with those privileges. Signed-off-by: Alan Coopersmith <alan.coopersm...@oracle.com> --- README.md | 12 ++++++++++++ configure.ac | 14 ++++++++++++++ src/RdFToI.c | 17 ++++++++++++++--- src/WrFFrI.c | 4 ++-- 4 files changed, 42 insertions(+), 5 deletions(-) Index: libXpm-3.5.14/README.md =================================================================== --- libXpm-3.5.14.orig/README.md +++ libXpm-3.5.14/README.md @@ -31,3 +31,15 @@ if it can't find the file it was asked t --enable-open-zfile feature to open the file, and is enabled by default when --enable-open-zfile is enabled, and can be disabled by passing the --disable-stat-zfile flag to the configure script. + +All of these commands will be executed with whatever userid & privileges the +function is called with, relying on the caller to ensure the correct euid, +egid, etc. are set before calling. + +To reduce risk, the paths to these commands are now set at configure time to +the first version found in the PATH used to run configure, and do not depend +on the PATH environment variable set at runtime. + +To specify paths to be used for these commands instead of searching $PATH, pass +the XPM_PATH_COMPRESS, XPM_PATH_UNCOMPRESS, XPM_PATH_GZIP, and XPM_PATH_GUNZIP +variables to the configure command. Index: libXpm-3.5.14/configure.ac =================================================================== --- libXpm-3.5.14.orig/configure.ac +++ libXpm-3.5.14/configure.ac @@ -49,6 +49,14 @@ if test "x$USE_GETTEXT" = "xyes" ; then fi AM_CONDITIONAL(USE_GETTEXT, test "x$USE_GETTEXT" = "xyes") +dnl Helper macro to find absolute path to program and add a #define for it +AC_DEFUN([XPM_PATH_PROG],[ +AC_PATH_PROG([$1], [$2], []) +AS_IF([test "x$$1" = "x"], + [AC_MSG_ERROR([$2 not found, set $1 or use --disable-open-zfile])]) +AC_DEFINE_UNQUOTED([$1], ["$$1"], [Path to $2]) +]) dnl End of AC_DEFUN([XPM_PATH_PROG]... + # Optional feature: When a filename ending in .Z or .gz is requested, # open a pipe to a newly forked compress/uncompress/gzip/gunzip command to # handle it. @@ -64,6 +72,11 @@ AC_ARG_ENABLE(open-zfile, AC_MSG_RESULT([$OPEN_ZFILE]) if test x$OPEN_ZFILE = xno ; then AC_DEFINE(NO_ZPIPE, 1, [Define to 1 to disable decompression via pipes]) +else + XPM_PATH_PROG([XPM_PATH_UNCOMPRESS], [uncompress]) + XPM_PATH_PROG([XPM_PATH_GZIP], [gzip]) + XPM_PATH_PROG([XPM_PATH_GUNZIP], [gunzip]) + AC_CHECK_FUNCS([closefrom close_range], [break]) fi # Optional feature: When ___.xpm is requested, also look for ___.xpm.Z & .gz Index: libXpm-3.5.14/src/RdFToI.c =================================================================== --- libXpm-3.5.14.orig/src/RdFToI.c +++ libXpm-3.5.14/src/RdFToI.c @@ -43,6 +43,7 @@ #include <errno.h> #include <sys/types.h> #include <sys/wait.h> +#include <unistd.h> #else #ifdef FOR_MSW #include <fcntl.h> @@ -161,7 +162,17 @@ xpmPipeThrough( goto err; if ( 0 == pid ) { - execlp(cmd, cmd, arg1, (char *)NULL); +#ifdef HAVE_CLOSEFROM + closefrom(3); +#elif defined(HAVE_CLOSE_RANGE) +# ifdef CLOSE_RANGE_UNSHARE +# define close_range_flags CLOSE_RANGE_UNSHARE +# else +# define close_range_flags 0 +#endif + close_range(3, ~0U, close_range_flags); +#endif + execl(cmd, cmd, arg1, (char *)NULL); perror(cmd); goto err; } @@ -235,12 +246,12 @@ OpenReadFile( if ( ext && !strcmp(ext, ".Z") ) { mdata->type = XPMPIPE; - mdata->stream.file = xpmPipeThrough(fd, "uncompress", "-c", "r"); + mdata->stream.file = xpmPipeThrough(fd, XPM_PATH_UNCOMPRESS, "-c", "r"); } else if ( ext && !strcmp(ext, ".gz") ) { mdata->type = XPMPIPE; - mdata->stream.file = xpmPipeThrough(fd, "gunzip", "-qc", "r"); + mdata->stream.file = xpmPipeThrough(fd, XPM_PATH_GUNZIP, "-qc", "r"); } else #endif /* z-files */ Index: libXpm-3.5.14/src/WrFFrI.c =================================================================== --- libXpm-3.5.14.orig/src/WrFFrI.c +++ libXpm-3.5.14/src/WrFFrI.c @@ -342,10 +342,10 @@ OpenWriteFile( #ifndef NO_ZPIPE len = strlen(filename); if (len > 2 && !strcmp(".Z", filename + (len - 2))) { - mdata->stream.file = xpmPipeThrough(fd, "compress", NULL, "w"); - mdata->type = XPMPIPE; + /* No compress program available (any longer?) on Linux */ + mdata->stream.file = NULL; } else if (len > 3 && !strcmp(".gz", filename + (len - 3))) { - mdata->stream.file = xpmPipeThrough(fd, "gzip", "-q", "w"); + mdata->stream.file = xpmPipeThrough(fd, XPM_PATH_GZIP, "-q", "w"); mdata->type = XPMPIPE; } else #endif ++++++ U_regression-bug1207029_1207030_1207031.patch ++++++ @@ -, +, @@ --- src/create.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) --- a/src/create.c +++ a/src/create.c @@ -994,11 +994,15 @@ CreateXImage( #if !defined(FOR_MSW) && !defined(AMIGA) if (height != 0 && (*image_return)->bytes_per_line >= INT_MAX / height) { XDestroyImage(*image_return); + *image_return = NULL; return XpmNoMemory; } /* now that bytes_per_line must have been set properly alloc data */ - if((*image_return)->bytes_per_line == 0 || height == 0) + if((*image_return)->bytes_per_line == 0 || height == 0) { + XDestroyImage(*image_return); + *image_return = NULL; return XpmNoMemory; + } (*image_return)->data = (char *) XpmMalloc((*image_return)->bytes_per_line * height); -- ++++++ U_regression2-bug1207029_1207030_1207031.patch ++++++ >From 8178eb0834d82242e1edbc7d4fb0d1b397569c68 Mon Sep 17 00:00:00 2001 From: Peter Hutterer <peter.hutte...@who-t.net> Date: Mon, 16 Jan 2023 19:44:52 +1000 Subject: [PATCH libXpm 7/7] Use gzip -d instead of gunzip GNU gunzip [1] is a shell script that exec's `gzip -d`. Even if we call /usr/bin/gunzip with the correct built-in path, the actual gzip call will use whichever gzip it finds first, making our patch pointless. Fix this by explicitly calling gzip -d instead. https://git.savannah.gnu.org/cgit/gzip.git/tree/gunzip.in [Part of the fix for CVE-2022-4883] Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> --- README.md | 2 +- configure.ac | 3 +-- src/RdFToI.c | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) Index: libXpm-3.5.14/README.md =================================================================== --- libXpm-3.5.14.orig/README.md +++ libXpm-3.5.14/README.md @@ -41,5 +41,5 @@ the first version found in the PATH used on the PATH environment variable set at runtime. To specify paths to be used for these commands instead of searching $PATH, pass -the XPM_PATH_COMPRESS, XPM_PATH_UNCOMPRESS, XPM_PATH_GZIP, and XPM_PATH_GUNZIP +the XPM_PATH_COMPRESS, XPM_PATH_UNCOMPRESS, and XPM_PATH_GZIP variables to the configure command. Index: libXpm-3.5.14/configure.ac =================================================================== --- libXpm-3.5.14.orig/configure.ac +++ libXpm-3.5.14/configure.ac @@ -58,7 +58,7 @@ AC_DEFINE_UNQUOTED([$1], ["$$1"], [Path ]) dnl End of AC_DEFUN([XPM_PATH_PROG]... # Optional feature: When a filename ending in .Z or .gz is requested, -# open a pipe to a newly forked compress/uncompress/gzip/gunzip command to +# open a pipe to a newly forked compress/uncompress/gzip command to # handle it. AC_MSG_CHECKING([whether to handle compressed pixmaps]) case $host_os in @@ -75,7 +75,6 @@ if test x$OPEN_ZFILE = xno ; then else XPM_PATH_PROG([XPM_PATH_UNCOMPRESS], [uncompress]) XPM_PATH_PROG([XPM_PATH_GZIP], [gzip]) - XPM_PATH_PROG([XPM_PATH_GUNZIP], [gunzip]) AC_CHECK_FUNCS([closefrom close_range], [break]) fi Index: libXpm-3.5.14/src/RdFToI.c =================================================================== --- libXpm-3.5.14.orig/src/RdFToI.c +++ libXpm-3.5.14/src/RdFToI.c @@ -251,7 +251,7 @@ OpenReadFile( else if ( ext && !strcmp(ext, ".gz") ) { mdata->type = XPMPIPE; - mdata->stream.file = xpmPipeThrough(fd, XPM_PATH_GUNZIP, "-qc", "r"); + mdata->stream.file = xpmPipeThrough(fd, XPM_PATH_GZIP, "-dqc", "r"); } else #endif /* z-files */