Skip to content
6 changes: 4 additions & 2 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
12 changes: 12 additions & 0 deletions python/build/cmake.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
10 changes: 5 additions & 5 deletions python/build/libs.py
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand All @@ -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',
Expand Down
2 changes: 2 additions & 0 deletions python/build/toolchain.py
Original file line number Diff line number Diff line change
Expand Up @@ -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']

Expand Down
7 changes: 6 additions & 1 deletion src/command/StickerCommands.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
8 changes: 4 additions & 4 deletions src/lib/upnp/Discovery.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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
Expand Down
Loading