Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gerbera for openSUSE:Factory checked in at 2022-05-25 20:35:05 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gerbera (Old) and /work/SRC/openSUSE:Factory/.gerbera.new.2254 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gerbera" Wed May 25 20:35:05 2022 rev:7 rq:979177 version:1.11.0 Changes: -------- --- /work/SRC/openSUSE:Factory/gerbera/gerbera.changes 2022-03-22 19:39:53.791070795 +0100 +++ /work/SRC/openSUSE:Factory/.gerbera.new.2254/gerbera.changes 2022-05-25 20:35:52.728337874 +0200 @@ -1,0 +2,35 @@ +Wed May 25 09:36:13 UTC 2022 - Paolo Stivanin <[email protected]> + +- Update 2635.patch + +------------------------------------------------------------------- +Wed May 18 09:23:12 UTC 2022 - Paolo Stivanin <[email protected]> + +- Add 2635.patch: this fixes and issue on i586 and x86 + +------------------------------------------------------------------- +Mon May 9 06:10:54 UTC 2022 - Paolo Stivanin <[email protected]> + +- Update to 1.11.0: + * New features: + - Database: Clients and statistics are stored database so restart + does not empty client list. Client grouping for play statistics. + - Search: Support searching playlists containers + - Search: Respect ContainerID when performing search + - Import: item class filtering and mapping by file properties + allows more sophisticated virtual structure + - Transcoding: Support filtering transcoding profiles by resource properties + (like codecs) avoids transcoding if client can play files + - DLNA: Detect DNLA profiles by resource attributes to specify more detailled + profile for handling in client + - File type support for WavPack improved: More metadata read with + special library if compiled in. + * Fixes: + - Playlist: Fix parser error + - Playlist: Handle end of file properly + - Browsing: Sort containers first + - Search: search result is sort by title now + - Import: Timestamps in future are not stored for containers + - Lots of others fixes: https://github.com/gerbera/gerbera/releases/tag/v1.11.0 + +------------------------------------------------------------------- Old: ---- gerbera-1.10.0.tar.gz New: ---- 2635.patch gerbera-1.11.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gerbera.spec ++++++ --- /var/tmp/diff_new_pack.MCvMik/_old 2022-05-25 20:35:53.116338416 +0200 +++ /var/tmp/diff_new_pack.MCvMik/_new 2022-05-25 20:35:53.120338421 +0200 @@ -17,7 +17,7 @@ Name: gerbera -Version: 1.10.0 +Version: 1.11.0 Release: 0 Summary: UPnP Media Server License: GPL-2.0-only @@ -27,6 +27,8 @@ Source1: config.xml Source2: gerbera.sysusers.in Patch0: harden_gerbera.service.patch +#PATCH-FIX-UPSTREAM https://github.com/gerbera/gerbera/pull/2635 +Patch1: 2635.patch BuildRequires: ccache BuildRequires: cmake >= 3.13 BuildRequires: fdupes ++++++ 2635.patch ++++++ >From ae46ab4684bd31df4537475dc33234ae85c9b1e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Strau=C3=9Fberger?= <[email protected]> Date: Tue, 17 May 2022 18:13:55 +0200 Subject: [PATCH] This and that May even solve: --- src/metadata/resolution.cc | 4 ++-- src/upnp_xml.cc | 4 ++-- src/util/process_executor.cc | 3 ++- src/util/tools.cc | 18 +++++++++++++++--- test/content/test_resolution.cc | 6 +++--- 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/metadata/resolution.cc b/src/metadata/resolution.cc index 031cb5788..476c644e5 100644 --- a/src/metadata/resolution.cc +++ b/src/metadata/resolution.cc @@ -33,7 +33,7 @@ Resolution::Resolution(const std::string& string) if (!parts[0].empty()) { auto x = stoulString(trimString(parts[0])); - if (x == 0 || x == std::numeric_limits<unsigned int>::max()) { + if (x == 0 || x == std::numeric_limits<uint64_t>::max()) { throw_std_runtime_error("Failed to parse '{}' to valid resolution", string); } _x = x; @@ -41,7 +41,7 @@ Resolution::Resolution(const std::string& string) if (!parts[1].empty()) { auto y = stoulString(trimString(parts[1])); - if (y == 0 || y == std::numeric_limits<unsigned int>::max()) { + if (y == 0 || y == std::numeric_limits<uint64_t>::max()) { throw_std_runtime_error("Failed to parse '{}' to valid resolution", string); } _y = y; diff --git a/src/upnp_xml.cc b/src/upnp_xml.cc index d2d6bc60b..2ed9c7bef 100644 --- a/src/upnp_xml.cc +++ b/src/upnp_xml.cc @@ -508,9 +508,9 @@ std::string UpnpXMLBuilder::renderExtension(const std::string& contentType, cons } if (!location.empty() && location.has_extension()) { - std::string extension = location.filename().extension(); + std::string extension = urlEscape(location.filename().extension().string()); if (!language.empty()) - return fmt::format("{}.{}{}", urlExt, language, extension); + return fmt::format("{}.{}{}", urlExt, urlEscape(language), extension); return fmt::format("{}{}", urlExt, extension); } diff --git a/src/util/process_executor.cc b/src/util/process_executor.cc index 5f238058a..8557175fe 100644 --- a/src/util/process_executor.cc +++ b/src/util/process_executor.cc @@ -70,7 +70,8 @@ ProcessExecutor::ProcessExecutor(const std::string& command, const std::vector<s log_debug("setenv: {}='{}'", eName, eValue); } log_debug("Launching process: {} {}", command, fmt::join(arglist, " ")); - execvp(command.c_str(), const_cast<char**>(argv.data())); + if (execvp(command.c_str(), const_cast<char**>(argv.data()))) + log_error("Failed to execvp {} {}", command, fmt::join(arglist, " ")); break; default: break; diff --git a/src/util/tools.cc b/src/util/tools.cc index 119b74f5b..4470b6f17 100644 --- a/src/util/tools.cc +++ b/src/util/tools.cc @@ -110,7 +110,13 @@ int stoiString(const std::string& str, int def, int base) if (str.empty() || (str[0] == '-' && !std::isdigit(*str.substr(1).c_str())) || (str[0] != '-' && !std::isdigit(*str.c_str()))) return def; - return std::stoi(str, nullptr, base); + try { + std::size_t pos; + return std::stoi(str, &pos, base); + } catch (const std::exception& ex) { + log_error("{} (input {})", ex.what(), str); + } + return def; } unsigned long stoulString(const std::string& str, int def, int base) @@ -118,7 +124,13 @@ unsigned long stoulString(const std::string& str, int def, int base) if (str.empty() || (str[0] == '-' && !std::isdigit(*str.substr(1).c_str())) || (str[0] != '-' && !std::isdigit(*str.c_str()))) return def; - return std::stoul(str, nullptr, base); + try { + std::size_t pos; + return std::stoul(str, &pos, base); + } catch (const std::exception& ex) { + log_error("{} (input {})", ex.what(), str); + } + return def; } void reduceString(std::string& str, char ch) @@ -252,7 +264,7 @@ std::string urlEscape(std::string_view str) if ((i + cplen) > str.length()) cplen = 1; - if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_' || c == '-') { + if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_' || c == '-' || c == '.') { buf << char(c); } else { int hi = c >> 4; diff --git a/test/content/test_resolution.cc b/test/content/test_resolution.cc index 6d4a75610..c30c5c489 100644 --- a/test/content/test_resolution.cc +++ b/test/content/test_resolution.cc @@ -3,10 +3,10 @@ #include "metadata//resolution.h" TEST(ResolutionTest, parse) { - auto res = Resolution("122586668x54589448448485"); + auto res = Resolution("122586668x448448485"); EXPECT_EQ(res.x(), 122586668); - EXPECT_EQ(res.y(), 54589448448485); + EXPECT_EQ(res.y(), 448448485); } TEST(ResolutionTest, parseWithSpace) { @@ -38,4 +38,4 @@ TEST(ResolutionTest, throwOnBad) { EXPECT_THROW(Resolution("0x"), std::runtime_error); EXPECT_THROW(Resolution("0x1"), std::runtime_error); EXPECT_THROW(Resolution("1x0"), std::runtime_error); -} \ No newline at end of file +} ++++++ gerbera-1.10.0.tar.gz -> gerbera-1.11.0.tar.gz ++++++ ++++ 28259 lines of diff (skipped)
