diff --git a/NEWS b/NEWS index dbe27b8e09..e4a6668b94 100644 --- a/NEWS +++ b/NEWS @@ -31,9 +31,11 @@ ver 0.25 (not yet released) * switch to C++23 * require Meson 1.2 -ver 0.24.15 (not yet released) +ver 0.24.15 (2026/08/27) * protocol - - fix crash on "sticker delete" + - fix crash on "sticker delete" and "sticker find" +* database + - upnp: fix crash bug * input - alsa, curl, nfs: fix stalled transfers * playlist diff --git a/python/build/cmake.py b/python/build/cmake.py index 12887d3bac..a877e87008 100644 --- a/python/build/cmake.py +++ b/python/build/cmake.py @@ -61,6 +61,18 @@ def __write_cmake_toolchain_file(f: TextIO, toolchain: AnyToolchain) -> None: set(CMAKE_FIND_ROOT_PATH "{toolchain.install_prefix}") set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +""") + elif toolchain.is_android: + # search libraries and headers only in the sysroot, not on + # the build host + f.write(f""" +set(CMAKE_SYSROOT {toolchain.sysroot}) + +set(CMAKE_FIND_ROOT_PATH {toolchain.install_prefix} ${{CMAKE_SYSROOT}}) +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) """) def configure(toolchain: AnyToolchain, src: str, build: str, args: list[str]=[], env: Optional[Mapping[str, str]]=None) -> None: diff --git a/python/build/libs.py b/python/build/libs.py index 560e70be39..252bbc2f11 100644 --- a/python/build/libs.py +++ b/python/build/libs.py @@ -40,8 +40,8 @@ ) libopenmpt = AutotoolsProject( - 'https://lib.openmpt.org/files/libopenmpt/src/libopenmpt-0.8.7+release.autotools.tar.gz', - '275c29ef47be9992f62a35fcc96f7ca05c06d2fd05c9298b8dee9f743f75b089', + 'https://lib.openmpt.org/files/libopenmpt/src/libopenmpt-0.8.8+release.autotools.tar.gz', + 'd4f00ddd29eecb9594bda7be76c13aaa2de1dadc18391c3e905f728ec9af8822', 'lib/libopenmpt.a', [ '--disable-shared', '--enable-static', @@ -53,12 +53,12 @@ '--without-portaudio', '--without-portaudiocpp', '--without-sndfile', '--without-flac', ], - base='libopenmpt-0.8.7+release.autotools', + base='libopenmpt-0.8.8+release.autotools', ) wildmidi = CmakeProject( - 'https://github.com/Mindwerks/wildmidi/releases/download/wildmidi-0.4.6/wildmidi-0.4.6.tar.gz', - '24ca992639ce76efa3737029fceb3672385d56e2ac0a15d50b40cc12d26e60de', + 'https://github.com/Mindwerks/wildmidi/releases/download/wildmidi-0.5.0/wildmidi-0.5.0.tar.gz', + '84a0d75fa2ea818995a57a7ccbfdda8c1042a39f388d5561b767a2c275b1b1eb', 'lib/libWildMidi.a', [ '-DBUILD_SHARED_LIBS=OFF', diff --git a/python/build/toolchain.py b/python/build/toolchain.py index 6e449b8821..fac15a1d48 100644 --- a/python/build/toolchain.py +++ b/python/build/toolchain.py @@ -73,6 +73,8 @@ def __init__(self, top_path: str, lib_path: str, llvm_path = os.path.join(ndk_path, 'toolchains', 'llvm', 'prebuilt', build_arch()) llvm_triple = host_triplet + android_api_level + self.sysroot = os.path.join(llvm_path, 'sysroot') + common_flags = '-Os -g' common_flags += ' ' + abi_info['cflags'] diff --git a/src/command/StickerCommands.cxx b/src/command/StickerCommands.cxx index 3b916b509d..2833ea773c 100644 --- a/src/command/StickerCommands.cxx +++ b/src/command/StickerCommands.cxx @@ -465,7 +465,12 @@ handle_sticker(Client &client, Request args, Response &r) args.pop_back(); } - bool has_op = args.size() > 4; + if (args.size() != 4 && args.size() != 6) { + r.Error(ACK_ERROR_ARG, "bad request"); + return CommandResult::ERROR; + } + + const bool has_op = args.size() == 6; auto value = has_op ? args[5] : nullptr; StickerOperator op = StickerOperator::EXISTS; if (has_op) { diff --git a/src/lib/upnp/Discovery.cxx b/src/lib/upnp/Discovery.cxx index 8caf936755..8edc46e16b 100644 --- a/src/lib/upnp/Discovery.cxx +++ b/src/lib/upnp/Discovery.cxx @@ -8,6 +8,7 @@ #include "Error.hxx" #include "lib/curl/Global.hxx" #include "lib/curl/Handler.hxx" +#include "lib/curl/HttpStatusError.hxx" #include "lib/curl/Request.hxx" #include "event/Call.hxx" #include "event/InjectEvent.hxx" @@ -104,10 +105,9 @@ void UPnPDeviceDirectory::Downloader::OnHeaders(unsigned status, Curl::Headers &&) { - if (status != 200) { - Destroy(); - return; - } + if (status != 200) + throw HttpStatusError(status, + "Failed to download UPnP device description"); } void