diff --git a/backport-Report-unsupported-compression-in-solv_xfopen-with-errno.patch b/backport-Report-unsupported-compression-in-solv_xfopen-with-errno.patch new file mode 100644 index 0000000000000000000000000000000000000000..d862b068256b16deee26148dbe9e55b9dd053301 --- /dev/null +++ b/backport-Report-unsupported-compression-in-solv_xfopen-with-errno.patch @@ -0,0 +1,103 @@ +From fee69285c3e530c80439adfb978de9da04e95760 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Mon, 13 May 2024 09:55:01 +0200 +Subject: [PATCH] Report unsupported compression in solv_xfopen() with errno + +If libsolv was built without Zstandard support and "primary.xml.zst" +was passed solv_xfopen(), solv_xfopen() returned 0 without setting +errno. A calling application could not distinguish an unsupported +compression format from other I/O errors. + +This patch improves this situation by setting errno variable to an +appropriate value. The value macros are documented in POSIX 2017. +--- + ext/solv_xfopen.c | 36 +++++++++++++++++++++++++++++------- + 1 file changed, 29 insertions(+), 7 deletions(-) + +diff --git a/ext/solv_xfopen.c b/ext/solv_xfopen.c +index 369003b4b..e23ea5963 100644 +--- a/ext/solv_xfopen.c ++++ b/ext/solv_xfopen.c +@@ -11,6 +11,7 @@ + #include + #include + #include ++#include + + #ifdef _WIN32 + #include "fmemopen.c" +@@ -660,7 +661,10 @@ solv_xfopen(const char *fn, const char *mode) + char *suf; + + if (!fn) +- return 0; ++ { ++ errno = EINVAL; ++ return 0; ++ } + if (!mode) + mode = "r"; + suf = strrchr(fn, '.'); +@@ -669,7 +673,10 @@ solv_xfopen(const char *fn, const char *mode) + return mygzfopen(fn, mode); + #else + if (suf && !strcmp(suf, ".gz")) +- return 0; ++ { ++ errno = ENOTSUP; ++ return 0; ++ } + #endif + #ifdef ENABLE_LZMA_COMPRESSION + if (suf && !strcmp(suf, ".xz")) +@@ -678,30 +685,45 @@ solv_xfopen(const char *fn, const char *mode) + return mylzfopen(fn, mode); + #else + if (suf && !strcmp(suf, ".xz")) +- return 0; ++ { ++ errno = ENOTSUP; ++ return 0; ++ } + if (suf && !strcmp(suf, ".lzma")) +- return 0; ++ { ++ errno = ENOTSUP; ++ return 0; ++ } + #endif + #ifdef ENABLE_BZIP2_COMPRESSION + if (suf && !strcmp(suf, ".bz2")) + return mybzfopen(fn, mode); + #else + if (suf && !strcmp(suf, ".bz2")) +- return 0; ++ { ++ errno = ENOTSUP; ++ return 0; ++ } + #endif + #ifdef ENABLE_ZSTD_COMPRESSION + if (suf && !strcmp(suf, ".zst")) + return myzstdfopen(fn, mode); + #else + if (suf && !strcmp(suf, ".zst")) +- return 0; ++ { ++ errno = ENOTSUP; ++ return 0; ++ } + #endif + #ifdef ENABLE_ZCHUNK_COMPRESSION + if (suf && !strcmp(suf, ".zck")) + return myzchunkfopen(fn, mode); + #else + if (suf && !strcmp(suf, ".zck")) +- return 0; ++ { ++ errno = ENOTSUP; ++ return 0; ++ } + #endif + return fopen(fn, mode); + } diff --git a/libsolv.spec b/libsolv.spec index f88564cc66590c7bdd5cd24e17964b236356c672..b707952d30f2b18b8d4b2b260429287bada28b7c 100644 --- a/libsolv.spec +++ b/libsolv.spec @@ -15,7 +15,7 @@ Name: libsolv Version: 0.7.24 -Release: 4 +Release: 5 Summary: Package dependency solver License: BSD URL: https://github.com/openSUSE/libsolv @@ -30,6 +30,7 @@ Patch6006: backport-Move-special-updaters-handling-into-its-own-function.patch Patch6007: backport-Handle-installed-packages-in-three-passes.patch Patch6008: backport-Fix-incomplete-headers.patch Patch6009: backport-Fix-a-possible-format-overflow-in-dump_genid.patch +Patch6010: backport-Report-unsupported-compression-in-solv_xfopen-with-errno.patch BuildRequires: cmake gcc-c++ ninja-build pkgconfig(rpm) zlib-devel BuildRequires: libxml2-devel xz-devel bzip2-devel @@ -223,6 +224,9 @@ Python 3 version. %{_mandir}/man3/%{name}*.3* %changelog +* Thu Aug 22 2024 guojunding - 0.7.24-5 +- Report unsupported compression in solv_xfopen() with errno + * Tue Jul 23 2024 zhangxingrong - 0.7.24-4 - Fix incomplete headers - Fix a possible format overflow in dump_genid