diff --git a/SOURCES/0020-Fix-dnf_context_module_install-memory-leaks.patch b/SOURCES/0020-Fix-dnf_context_module_install-memory-leaks.patch new file mode 100644 index 0000000..ea8bcf0 --- /dev/null +++ b/SOURCES/0020-Fix-dnf_context_module_install-memory-leaks.patch @@ -0,0 +1,28 @@ +From 4a8a3f410552c58dfafb384bb361c6e40bebff1d Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel +Date: Wed, 21 Jul 2021 11:01:32 +0200 +Subject: [PATCH] Fix: dnf_context_module_install: memory leaks + +--- + libdnf/dnf-context.cpp | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/libdnf/dnf-context.cpp b/libdnf/dnf-context.cpp +index 55af2b2..6cb0011 100644 +--- a/libdnf/dnf-context.cpp ++++ b/libdnf/dnf-context.cpp +@@ -3486,7 +3486,10 @@ dnf_context_module_install(DnfContext * context, const char ** module_specs, GEr + } + for (const auto &nevra : modpkg->getArtifacts()) { + int epoch; +- char *name, *version, *release, *arch; ++ g_autofree char *name = nullptr; ++ g_autofree char *version = nullptr; ++ g_autofree char *release = nullptr; ++ g_autofree char *arch = nullptr; + if (hy_split_nevra(nevra.c_str(), &name, &epoch, &version, &release, &arch)) { + // this really should never happen; unless the modular repodata is corrupted + g_autofree char *errmsg = g_strdup_printf (_("Failed to parse module artifact NEVRA '%s'"), nevra.c_str()); +-- +libgit2 1.0.1 + diff --git a/SOURCES/0021-covscan-remove-unused-vars-mark-private-func-static-return-values.patch b/SOURCES/0021-covscan-remove-unused-vars-mark-private-func-static-return-values.patch new file mode 100644 index 0000000..6dca417 --- /dev/null +++ b/SOURCES/0021-covscan-remove-unused-vars-mark-private-func-static-return-values.patch @@ -0,0 +1,91 @@ +From 07416268889f95e1495fb3d7b856de1c502870ba Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel +Date: Wed, 21 Jul 2021 11:15:50 +0200 +Subject: [PATCH] covscan: remove unused vars, mark private func static, return values + +The `begin` and `end` variables were not used +in `ModulePackageContainer::updateFailSafeData`. Removed. + +The `checksum` in "utils.cpp" is a private (static) function. + +Added check of return value of `dnf_copy_recursive` function in unit test. + +In the `install` in the "goal-py.cpp" file: +Explicitly ignores the return values of `hy_goal_install` and +`hy_goal_install_optional`. The functions always return zero. +Explicitly ignores the return values of `hy_goal_install_selector` and +`hy_goal_install_selector_optional`. The `error` argument is used instead. +--- + libdnf/module/ModulePackageContainer.cpp | 2 -- + libdnf/utils/utils.cpp | 2 +- + python/hawkey/goal-py.cpp | 8 ++++---- + tests/libdnf/module/ModulePackageContainerTest.cpp | 3 ++- + 4 files changed, 7 insertions(+), 8 deletions(-) + +diff --git a/libdnf/module/ModulePackageContainer.cpp b/libdnf/module/ModulePackageContainer.cpp +index c0ad126..efab497 100644 +--- a/libdnf/module/ModulePackageContainer.cpp ++++ b/libdnf/module/ModulePackageContainer.cpp +@@ -1656,8 +1656,6 @@ void ModulePackageContainer::updateFailSafeData() + if (pImpl->activatedModules) { + std::vector latest = pImpl->getLatestActiveEnabledModules(); + +- auto begin = fileNames.begin(); +- auto end = fileNames.end(); + if (g_mkdir_with_parents(pImpl->persistDir.c_str(), 0755) == -1) { + const char * errTxt = strerror(errno); + auto logger(Log::getLogger()); +diff --git a/libdnf/utils/utils.cpp b/libdnf/utils/utils.cpp +index 450718d..15f5275 100644 +--- a/libdnf/utils/utils.cpp ++++ b/libdnf/utils/utils.cpp +@@ -301,7 +301,7 @@ void decompress(const char * inPath, const char * outPath, mode_t outMode, const + fclose(inFile); + } + +-void checksum(const char * type, const char * inPath, const char * checksum_valid, bool * valid_out, gchar ** calculated_out) ++static void checksum(const char * type, const char * inPath, const char * checksum_valid, bool * valid_out, gchar ** calculated_out) + { + GError * errP{nullptr}; + gboolean valid; +diff --git a/python/hawkey/goal-py.cpp b/python/hawkey/goal-py.cpp +index 2641a1d..5bbb959 100644 +--- a/python/hawkey/goal-py.cpp ++++ b/python/hawkey/goal-py.cpp +@@ -281,15 +281,15 @@ install(_GoalObject *self, PyObject *args, PyObject *kwds) try + + if (flags & HY_WEAK_SOLV) { + if (pkg) { +- hy_goal_install_optional(self->goal, pkg); ++ (void)hy_goal_install_optional(self->goal, pkg); + } else { +- hy_goal_install_selector_optional(self->goal, sltr, &error); ++ (void)hy_goal_install_selector_optional(self->goal, sltr, &error); + } + } else { + if (pkg) { +- hy_goal_install(self->goal, pkg); ++ (void)hy_goal_install(self->goal, pkg); + } else { +- hy_goal_install_selector(self->goal, sltr, &error); ++ (void)hy_goal_install_selector(self->goal, sltr, &error); + } + } + return op_error2exc(error); +diff --git a/tests/libdnf/module/ModulePackageContainerTest.cpp b/tests/libdnf/module/ModulePackageContainerTest.cpp +index b2cf170..6360a0c 100644 +--- a/tests/libdnf/module/ModulePackageContainerTest.cpp ++++ b/tests/libdnf/module/ModulePackageContainerTest.cpp +@@ -17,7 +17,8 @@ void ModulePackageContainerTest::setUp() + char *retptr = mkdtemp(tmpdir); + CPPUNIT_ASSERT(retptr); + char * etc_target = g_strjoin(NULL, tmpdir, "/etc", NULL); +- dnf_copy_recursive(TESTDATADIR "/modules/etc", etc_target, &error); ++ auto ret = dnf_copy_recursive(TESTDATADIR "/modules/etc", etc_target, &error); ++ g_assert_true(ret); + g_assert_no_error(error); + g_free(etc_target); + +-- +libgit2 1.0.1 + diff --git a/SOURCES/0022-hawkey-surrogateescape-error-handler-to-decode-UTF-8-strings-RhBug1893176.patch b/SOURCES/0022-hawkey-surrogateescape-error-handler-to-decode-UTF-8-strings-RhBug1893176.patch new file mode 100644 index 0000000..8918c27 --- /dev/null +++ b/SOURCES/0022-hawkey-surrogateescape-error-handler-to-decode-UTF-8-strings-RhBug1893176.patch @@ -0,0 +1,32 @@ +From 263eee36afc0ae5c8f342f4b61038e91ee942b21 Mon Sep 17 00:00:00 2001 +From: Marek Blaha +Date: Thu, 22 Apr 2021 15:19:26 +0200 +Subject: [PATCH] hawkey: surrogateescape error handler to decode UTF-8 strings (RhBug:1893176) + +This ensures that libdnf does not raise UnicodeDecodeError when +accessing package with non UTF-8 file names. + += changelog = +msg: DNF does not fail on non UTF-8 file names in a package +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1893176 +--- + python/hawkey/iutil-py.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/python/hawkey/iutil-py.cpp b/python/hawkey/iutil-py.cpp +index 56ccafd..57bef57 100644 +--- a/python/hawkey/iutil-py.cpp ++++ b/python/hawkey/iutil-py.cpp +@@ -285,7 +285,7 @@ strlist_to_pylist(const char **slist) + return NULL; + + for (const char **iter = slist; *iter; ++iter) { +- UniquePtrPyObject str(PyUnicode_FromString(*iter)); ++ UniquePtrPyObject str(PyUnicode_DecodeUTF8(*iter, strlen(*iter), "surrogateescape")); + if (!str) + return NULL; + int rc = PyList_Append(list.get(), str.get()); +-- +libgit2 1.0.1 + diff --git a/SPECS/libdnf.spec b/SPECS/libdnf.spec index 3fe571a..23dbc8a 100644 --- a/SPECS/libdnf.spec +++ b/SPECS/libdnf.spec @@ -56,7 +56,7 @@ Name: libdnf Version: %{libdnf_major_version}.%{libdnf_minor_version}.%{libdnf_micro_version} -Release: 1%{?dist} +Release: 2%{?dist} Summary: Library providing simplified C and Python API to libsolv License: LGPLv2+ URL: https://github.com/rpm-software-management/libdnf @@ -80,6 +80,9 @@ Patch16: 0016-Fix-failing-unittest-caused-by-the-revert-of-new-mod.patch Patch17: 0017-Modify-unit-test-after-change-of-handling-advisories.patch Patch18: 0018-Adjust-module-error-formatting-function-for-original.patch Patch19: 0019-Remove-redundant-test.patch +Patch20: 0020-Fix-dnf_context_module_install-memory-leaks.patch +Patch21: 0021-covscan-remove-unused-vars-mark-private-func-static-return-values.patch +Patch22: 0022-hawkey-surrogateescape-error-handler-to-decode-UTF-8-strings-RhBug1893176.patch BuildRequires: cmake BuildRequires: gcc @@ -324,6 +327,11 @@ popd %endif %changelog +* Tue Jul 27 2021 Pavla Kratochvilova - 0.63.0-2 +- Fix: dnf_context_module_install: memory leaks +- covscan: remove unused vars, mark private func static, return values +- DNF does not fail on non UTF-8 file names in a package + * Wed May 19 2021 Pavla Kratochvilova - 0.63.0-1 - Update to 0.62.0 - Hardening: add signature check with rpmcliVerifySignatures (RhBug:1932079)