diff --git a/.github/workflows/guix b/.github/workflows/guix new file mode 100644 index 0000000..1d07710 --- /dev/null +++ b/.github/workflows/guix @@ -0,0 +1,11 @@ +abi , +include + +# https://bugs.launchpad.net/ubuntu/+source/guix/+bug/2064115 + +profile guix /usr/bin/guix flags=(unconfined) { + userns, + + # Site-specific additions and overrides. See local/README for details. + include if exists +} diff --git a/.github/workflows/guix.yml b/.github/workflows/guix.yml index 6a79e62..8418f2d 100644 --- a/.github/workflows/guix.yml +++ b/.github/workflows/guix.yml @@ -4,7 +4,7 @@ on: [push, pull_request] jobs: cache-sources: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 with: @@ -20,7 +20,7 @@ jobs: run: make -C contrib/depends download build-guix: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 needs: [cache-sources] strategy: fail-fast: false @@ -52,9 +52,20 @@ jobs: path: contrib/depends/sources key: sources-${{ hashFiles('contrib/depends/packages/*') }} - name: install dependencies - run: sudo apt update; sudo apt -y install guix git ca-certificates + run: sudo apt update; sudo apt -y install guix git ca-certificates apparmor-utils + - name: fix apparmor + run: sudo cp .github/workflows/guix /etc/apparmor.d/guix; sudo /etc/init.d/apparmor reload; sudo aa-enforce guix || echo "failed" + - name: purge apparmor + run: sudo apt purge apparmor - name: build - run: SUBSTITUTE_URLS='http://ci.guix.gnu.org' HOSTS="${{ matrix.toolchain.target }}" ./contrib/guix/guix-build + run: SUBSTITUTE_URLS='http://bordeaux.guix.gnu.org' HOSTS="${{ matrix.toolchain.target }}" ./contrib/guix/guix-build + - name: virustotal scan + if: matrix.toolchain.target == 'x86_64-w64-mingw32' + uses: crazy-max/ghaction-virustotal@v4 + with: + vt_api_key: ${{ secrets.VT_API_KEY }} + files: | + guix/guix-build-*/build/distsrc-*/build/bin/feather.exe - uses: actions/upload-artifact@v4 with: name: ${{ matrix.toolchain.target }} @@ -63,7 +74,7 @@ jobs: guix/guix-build-*/logs/${{ matrix.toolchain.target }}/* bundle-logs: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 needs: [build-guix] steps: - uses: actions/download-artifact@v4 diff --git a/CMakeLists.txt b/CMakeLists.txt index 2274535..297ead2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.18) project(feather - VERSION "2.6.7" + VERSION "2.6.8" DESCRIPTION "A free Monero desktop wallet" LANGUAGES CXX C ASM ) diff --git a/contrib/depends/packages/boost.mk b/contrib/depends/packages/boost.mk index dd02ce9..83d3b43 100644 --- a/contrib/depends/packages/boost.mk +++ b/contrib/depends/packages/boost.mk @@ -1,8 +1,8 @@ package=boost -$(package)_version=1.84.0 -$(package)_download_path=https://downloads.sourceforge.net/project/boost/boost/$($(package)_version)/ -$(package)_file_name=$(package)_$(subst .,_,$($(package)_version)).tar.bz2 -$(package)_sha256_hash=cc4b893acf645c9d4b698e9a0f08ca8846aa5d6c68275c14c3e7949c24109454 +$(package)_version=1.85.0 +$(package)_download_path=https://boostorg.jfrog.io/artifactory/main/release/$($(package)_version)/source/ +$(package)_file_name=$(package)_$(subst .,_,$($(package)_version)).tar.gz +$(package)_sha256_hash=be0d91732d5b0cc6fbb275c7939974457e79b54d6f07ce2e3dfdd68bef883b0b $(package)_dependencies=libiconv $(package)_patches=disable_addr2line.patch diff --git a/contrib/depends/packages/libgpg-error.mk b/contrib/depends/packages/libgpg-error.mk index 474cdd0..c668f80 100644 --- a/contrib/depends/packages/libgpg-error.mk +++ b/contrib/depends/packages/libgpg-error.mk @@ -1,8 +1,8 @@ package=libgpg-error -$(package)_version=1.48 +$(package)_version=1.49 $(package)_download_path=https://www.gnupg.org/ftp/gcrypt/libgpg-error/ -$(package)_file_name=libgpg-error-$($(package)_version).tar.bz2 -$(package)_sha256_hash=89ce1ae893e122924b858de84dc4f67aae29ffa610ebf668d5aa539045663d6f +$(package)_file_name=libgpg-error-$($(package)_version).tar.gz +$(package)_sha256_hash=e59cc3ced0ae86f49073e2f2344676919a82fc5033716bee7232f6f778158792 define $(package)_set_vars $(package)_build_opts=CFLAGS="-fPIE" diff --git a/contrib/depends/packages/sodium.mk b/contrib/depends/packages/libsodium.mk similarity index 83% rename from contrib/depends/packages/sodium.mk rename to contrib/depends/packages/libsodium.mk index dc57517..90856a0 100644 --- a/contrib/depends/packages/sodium.mk +++ b/contrib/depends/packages/libsodium.mk @@ -1,8 +1,8 @@ -package=sodium -$(package)_version=1.0.19 +package=libsodium +$(package)_version=1.0.20 $(package)_download_path=https://download.libsodium.org/libsodium/releases/ $(package)_file_name=libsodium-$($(package)_version).tar.gz -$(package)_sha256_hash=018d79fe0a045cca07331d37bd0cb57b2e838c51bc48fd837a1472e50068bbea +$(package)_sha256_hash=ebb65ef6ca439333c2bb41a0c1990587288da07f6c7fd07cb3a18cc18d30ce19 $(package)_patches += fix-blake2b-symbol-naming.patch define $(package)_set_vars @@ -11,6 +11,7 @@ define $(package)_set_vars endef define $(package)_preprocess_cmds + rm -rf builds/msvc &&\ cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub build-aux/ && \ patch -p1 -i $($(package)_patch_dir)/fix-blake2b-symbol-naming.patch && \ autoconf diff --git a/contrib/depends/packages/native_qt.mk b/contrib/depends/packages/native_qt.mk index 637b95d..4a89a5b 100644 --- a/contrib/depends/packages/native_qt.mk +++ b/contrib/depends/packages/native_qt.mk @@ -1,9 +1,9 @@ package=native_qt -$(package)_version=6.7.0 +$(package)_version=6.7.2 $(package)_download_path=https://download.qt.io/official_releases/qt/6.7/$($(package)_version)/submodules $(package)_suffix=everywhere-src-$($(package)_version).tar.xz $(package)_file_name=qtbase-$($(package)_suffix) -$(package)_sha256_hash=11b2e29e2e52fb0e3b453ea13bbe51a10fdff36e1c192d8868c5a40233b8b254 +$(package)_sha256_hash=c5f22a5e10fb162895ded7de0963328e7307611c688487b5d152c9ee64767599 $(package)_qt_libs=corelib network widgets gui plugins testlib $(package)_patches = dont_hardcode_pwd.patch $(package)_patches += fast_fixed_dtoa_no_optimize.patch @@ -13,16 +13,16 @@ $(package)_patches += rcc_hardcode_timestamp.patch $(package)_patches += root_CMakeLists.txt $(package)_qttools_file_name=qttools-$($(package)_suffix) -$(package)_qttools_sha256_hash=c8da6b239e82fe1e23465cbf0936c0da5a334438d3fb433e19c503cbb1abee7b +$(package)_qttools_sha256_hash=58e855ad1b2533094726c8a425766b63a04a0eede2ed85086860e54593aa4b2a $(package)_qtsvg_file_name=qtsvg-$($(package)_suffix) -$(package)_qtsvg_sha256_hash=1518f40e08ff5e6153a6e26e5b95b033413ac143b70795dc1317e7f73ebf922d +$(package)_qtsvg_sha256_hash=fb0d1286a35be3583fee34aeb5843c94719e07193bdf1d4d8b0dc14009caef01 $(package)_qtmultimedia_file_name=qtmultimedia-$($(package)_suffix) -$(package)_qtmultimedia_sha256_hash=f394bae49e3d4ee6a3b0c9e1e5e31bb870cc04a4b44f4cda3615baf7bd078c70 +$(package)_qtmultimedia_sha256_hash=8ef835115acb9a1d3d2c9f23cfacb43f2c537e3786a8ab822299a2a7765651d3 $(package)_qtshadertools_file_name=qtshadertools-$($(package)_suffix) -$(package)_qtshadertools_sha256_hash=3e13f967c62f0815c901e754cbc472a2e19170da0c7a505230d559615f7998af +$(package)_qtshadertools_sha256_hash=edfa34c0ac8c00fcaa949df1d8e7a77d89dadd6386e683ce6c3e3b117e2f7cc1 $(package)_extra_sources += $($(package)_qttools_file_name) $(package)_extra_sources += $($(package)_qtsvg_file_name) diff --git a/contrib/depends/packages/openssl.mk b/contrib/depends/packages/openssl.mk index 8fc6e46..5d5e3c3 100644 --- a/contrib/depends/packages/openssl.mk +++ b/contrib/depends/packages/openssl.mk @@ -1,8 +1,8 @@ package=openssl -$(package)_version=3.2.1 +$(package)_version=3.3.1 $(package)_download_path=https://www.openssl.org/source $(package)_file_name=$(package)-$($(package)_version).tar.gz -$(package)_sha256_hash=83c7329fe52c850677d75e5d0b0ca245309b97e8ecbcfdc1dfdc4ab9fac35b39 +$(package)_sha256_hash=777cd596284c883375a2a7a11bf5d2786fc5413255efab20c50d6ffe6d020b7e define $(package)_set_vars $(package)_config_env=AR="$($(package)_ar)" ARFLAGS=$($(package)_arflags) RANLIB="$($(package)_ranlib)" CC="$($(package)_cc)" @@ -49,7 +49,8 @@ $(package)_config_opts_x86_64_freebsd=BSD-x86_64 endef define $(package)_preprocess_cmds - sed -i.old 's|crypto ssl apps util tools fuzz providers doc|crypto ssl util tools providers|' build.info + sed -i.old 's|crypto ssl apps util tools fuzz providers doc|crypto ssl util tools providers|' build.info &&\ + rm -rf doc demos apps test endef define $(package)_config_cmds diff --git a/contrib/depends/packages/packages.mk b/contrib/depends/packages/packages.mk index d25c00d..b8e4330 100644 --- a/contrib/depends/packages/packages.mk +++ b/contrib/depends/packages/packages.mk @@ -1,4 +1,4 @@ -packages := boost openssl libiconv unbound qrencode sodium polyseed hidapi protobuf libusb zlib libgpg-error libgcrypt expat libzip zxing-cpp +packages := boost openssl libiconv unbound qrencode libsodium polyseed hidapi protobuf libusb zlib libgpg-error libgcrypt expat libzip zxing-cpp native_packages := native_qt native_protobuf linux_packages := eudev libfuse libsquashfuse zstd appimage_runtime diff --git a/contrib/depends/packages/qt.mk b/contrib/depends/packages/qt.mk index 0833d8d..aaa1fd1 100644 --- a/contrib/depends/packages/qt.mk +++ b/contrib/depends/packages/qt.mk @@ -1,9 +1,9 @@ package=qt -$(package)_version=6.7.0 +$(package)_version=6.7.2 $(package)_download_path=https://download.qt.io/official_releases/qt/6.7/$($(package)_version)/submodules $(package)_suffix=everywhere-src-$($(package)_version).tar.xz $(package)_file_name=qtbase-$($(package)_suffix) -$(package)_sha256_hash=11b2e29e2e52fb0e3b453ea13bbe51a10fdff36e1c192d8868c5a40233b8b254 +$(package)_sha256_hash=c5f22a5e10fb162895ded7de0963328e7307611c688487b5d152c9ee64767599 $(package)_darwin_dependencies=native_cctools native_qt openssl $(package)_mingw32_dependencies=openssl native_qt $(package)_linux_dependencies=openssl native_qt freetype fontconfig libxcb libxkbcommon libxcb_util libxcb_util_render libxcb_util_keysyms libxcb_util_image libxcb_util_wm libxcb_util_cursor dbus @@ -21,22 +21,24 @@ $(package)_patches += toolchain.cmake $(package)_patches += revert-macOS-Silence-warning-about-supporting-secure.patch $(package)_patches += no-resonance-audio.patch $(package)_patches += fix_static_qt_darwin_camera_permissions.patch +$(package)_patches += revert-f67ee7c39.patch +$(package)_patches += CVE-2024-39936.patch #$(package)_patches += fix-static-fontconfig-static-linking.patch $(package)_qttools_file_name=qttools-$($(package)_suffix) -$(package)_qttools_sha256_hash=c8da6b239e82fe1e23465cbf0936c0da5a334438d3fb433e19c503cbb1abee7b +$(package)_qttools_sha256_hash=58e855ad1b2533094726c8a425766b63a04a0eede2ed85086860e54593aa4b2a $(package)_qtsvg_file_name=qtsvg-$($(package)_suffix) -$(package)_qtsvg_sha256_hash=1518f40e08ff5e6153a6e26e5b95b033413ac143b70795dc1317e7f73ebf922d +$(package)_qtsvg_sha256_hash=fb0d1286a35be3583fee34aeb5843c94719e07193bdf1d4d8b0dc14009caef01 $(package)_qtwebsockets_file_name=qtwebsockets-$($(package)_suffix) -$(package)_qtwebsockets_sha256_hash=5ffc77da6b36cdf18e04c975a0fbf243968806a93a6291bcd2e9cd0b26139736 +$(package)_qtwebsockets_sha256_hash=5bde4af6ec9ce8c8632b782ab77b82d910721be2c714e6d38902521bcd1d215f $(package)_qtmultimedia_file_name=qtmultimedia-$($(package)_suffix) -$(package)_qtmultimedia_sha256_hash=f394bae49e3d4ee6a3b0c9e1e5e31bb870cc04a4b44f4cda3615baf7bd078c70 +$(package)_qtmultimedia_sha256_hash=8ef835115acb9a1d3d2c9f23cfacb43f2c537e3786a8ab822299a2a7765651d3 $(package)_qtshadertools_file_name=qtshadertools-$($(package)_suffix) -$(package)_qtshadertools_sha256_hash=3e13f967c62f0815c901e754cbc472a2e19170da0c7a505230d559615f7998af +$(package)_qtshadertools_sha256_hash=edfa34c0ac8c00fcaa949df1d8e7a77d89dadd6386e683ce6c3e3b117e2f7cc1 $(package)_extra_sources += $($(package)_qttools_file_name) $(package)_extra_sources += $($(package)_qtsvg_file_name) @@ -198,10 +200,12 @@ define $(package)_preprocess_cmds patch -p1 -i $($(package)_patch_dir)/libxau-fix.patch && \ patch -p1 -i $($(package)_patch_dir)/revert-macOS-Silence-warning-about-supporting-secure.patch && \ patch -p1 -i $($(package)_patch_dir)/fix_static_qt_darwin_camera_permissions.patch && \ + patch -p1 -i $($(package)_patch_dir)/CVE-2024-39936.patch && \ cd ../qtmultimedia && \ patch -p1 -i $($(package)_patch_dir)/qtmultimedia-fixes.patch && \ patch -p1 -i $($(package)_patch_dir)/v4l2.patch && \ - patch -p1 -i $($(package)_patch_dir)/no-resonance-audio.patch + patch -p1 -i $($(package)_patch_dir)/no-resonance-audio.patch && \ + patch -p1 -i $($(package)_patch_dir)/revert-f67ee7c39.patch endef define $(package)_config_cmds diff --git a/contrib/depends/packages/tor_linux.mk b/contrib/depends/packages/tor_linux.mk index 2d378a7..31ab0d6 100644 --- a/contrib/depends/packages/tor_linux.mk +++ b/contrib/depends/packages/tor_linux.mk @@ -1,8 +1,8 @@ package=tor_linux -$(package)_version=0.4.8.10 +$(package)_version=0.4.8.12 $(package)_download_path=https://dist.torproject.org/ $(package)_file_name=tor-$($(package)_version).tar.gz -$(package)_sha256_hash=e628b4fab70edb4727715b23cf2931375a9f7685ac08f2c59ea498a178463a86 +$(package)_sha256_hash=ca7cc735d98e3747b58f2f3cc14f804dd789fa0fb333a84dcb6bd70adbb8c874 $(package)_dependencies=libevent openssl zlib define $(package)_set_vars @@ -17,6 +17,12 @@ define $(package)_set_vars $(package)_ldflags+=$(guix_ldflags) endef +define $(package)_preprocess_cmds + rm Makefile.in aclocal.m4 ar-lib compile config.guess config.sub configure depcomp install-sh missing orconfig.h.in test-driver &&\ + rm -rf doc/man &&\ + autoreconf -fi +endef + define $(package)_config_cmds $($(package)_autoconf) $($(package)_config_opts) endef diff --git a/contrib/depends/packages/unbound.mk b/contrib/depends/packages/unbound.mk index 51ae3e0..9517349 100644 --- a/contrib/depends/packages/unbound.mk +++ b/contrib/depends/packages/unbound.mk @@ -1,10 +1,9 @@ package=unbound -$(package)_version=1.19.3 +$(package)_version=1.20.0 $(package)_download_path=https://www.nlnetlabs.nl/downloads/$(package)/ $(package)_file_name=$(package)-$($(package)_version).tar.gz -$(package)_sha256_hash=3ae322be7dc2f831603e4b0391435533ad5861c2322e34a76006a9fb65eb56b9 +$(package)_sha256_hash=56b4ceed33639522000fd96775576ddf8782bb3617610715d7f1e777c5ec1dbf $(package)_dependencies=openssl expat -$(package)_patches=disable-glibc-reallocarray.patch define $(package)_set_vars $(package)_config_opts=--disable-shared --enable-static --without-pyunbound --prefix=$(host_prefix) @@ -17,7 +16,8 @@ define $(package)_set_vars endef define $(package)_preprocess_cmds - patch -p1 < $($(package)_patch_dir)/disable-glibc-reallocarray.patch &&\ + rm configure~ doc/IP-BasedActions.pdf doc/ietf67-design-02.odp doc/ietf67-design-02.pdf doc/CNAME-basedRedirectionDesignNotes.pdf &&\ + rm -rf testdata dnscrypt/testdata &&\ autoconf endef diff --git a/contrib/depends/patches/boost/disable_addr2line.patch b/contrib/depends/patches/boost/disable_addr2line.patch index ad87b00..4c4373d 100644 --- a/contrib/depends/patches/boost/disable_addr2line.patch +++ b/contrib/depends/patches/boost/disable_addr2line.patch @@ -4,20 +4,20 @@ diff --git a/libs/stacktrace/build/Jamfile.v2 b/libs/stacktrace/build/Jamfile.v2 index 230d5a8b4..d3d74599b 100644 --- a/libs/stacktrace/build/Jamfile.v2 +++ b/libs/stacktrace/build/Jamfile.v2 -@@ -42,9 +42,6 @@ rule mp-run-simple ( sources + : args * : input-files * : requirements * : targe +@@ -48,9 +48,6 @@ rule mp-run-simple ( sources + : args * : input-files * : requirements * : targe mp-run-simple has_backtrace.cpp : : : backtrace : libbacktrace ; explicit libbacktrace ; - + -mp-run-simple has_addr2line.cpp : : : : addr2line ; -explicit addr2line ; - mp-run-simple has_windbg.cpp : : : Dbgeng ole32 : WinDbg ; explicit WinDbg ; - -@@ -76,19 +73,6 @@ lib boost_stacktrace_backtrace + +@@ -82,19 +79,6 @@ lib boost_stacktrace_backtrace #shared:BOOST_STACKTRACE_DYN_LINK=1 ; - + -lib boost_stacktrace_addr2line - : # sources - ../src/addr2line.cpp @@ -34,9 +34,9 @@ index 230d5a8b4..d3d74599b 100644 lib boost_stacktrace_basic : # sources ../src/basic.cpp -@@ -128,4 +112,4 @@ lib boost_stacktrace_windbg_cached +@@ -152,4 +136,4 @@ lib boost_stacktrace_from_exception #shared:BOOST_STACKTRACE_DYN_LINK=1 ; - --boost-install boost_stacktrace_noop boost_stacktrace_backtrace boost_stacktrace_addr2line boost_stacktrace_basic boost_stacktrace_windbg boost_stacktrace_windbg_cached ; -+boost-install boost_stacktrace_noop boost_stacktrace_backtrace boost_stacktrace_basic boost_stacktrace_windbg boost_stacktrace_windbg_cached ; + +-boost-install boost_stacktrace_noop boost_stacktrace_backtrace boost_stacktrace_addr2line boost_stacktrace_basic boost_stacktrace_windbg boost_stacktrace_windbg_cached boost_stacktrace_from_exception ; ++boost-install boost_stacktrace_noop boost_stacktrace_backtrace boost_stacktrace_basic boost_stacktrace_windbg boost_stacktrace_windbg_cached boost_stacktrace_from_exception ; diff --git a/contrib/depends/patches/sodium/fix-blake2b-symbol-naming.patch b/contrib/depends/patches/libsodium/fix-blake2b-symbol-naming.patch similarity index 100% rename from contrib/depends/patches/sodium/fix-blake2b-symbol-naming.patch rename to contrib/depends/patches/libsodium/fix-blake2b-symbol-naming.patch diff --git a/contrib/depends/patches/qt/CVE-2024-39936.patch b/contrib/depends/patches/qt/CVE-2024-39936.patch new file mode 100644 index 0000000..440e0cc --- /dev/null +++ b/contrib/depends/patches/qt/CVE-2024-39936.patch @@ -0,0 +1,235 @@ +From 2b1e36e183ce75c224305c7a94457b92f7a5cf58 Mon Sep 17 00:00:00 2001 +From: MÃ¥rten Nordheim +Date: Tue, 25 Jun 2024 17:09:35 +0200 +Subject: [PATCH] HTTP2: Delay any communication until encrypted() can be responded to + +We have the encrypted() signal that lets users do extra checks on the +established connection. It is emitted as BlockingQueued, so the HTTP +thread stalls until it is done emitting. Users can potentially call +abort() on the QNetworkReply at that point, which is passed as a Queued +call back to the HTTP thread. That means that any currently queued +signal emission will be processed before the abort() call is processed. + +In the case of HTTP2 it is a little special since it is multiplexed and +the code is built to start requests as they are available. This means +that, while the code worked fine for HTTP1, since one connection only +has one request, it is not working for HTTP2, since we try to send more +requests in-between the encrypted() signal and the abort() call. + +This patch changes the code to delay any communication until the +encrypted() signal has been emitted and processed, for HTTP2 only. +It's done by adding a few booleans, both to know that we have to return +early and so we can keep track of what events arose and what we need to +resume once enough time has passed that any abort() call must have been +processed. + +Fixes: QTBUG-126610 +Pick-to: 6.5 6.2 5.15 5.12 +Change-Id: Ic25a600c278203256e35f541026f34a8783235ae +Reviewed-by: Marc Mutz +Reviewed-by: Volker Hilsheimer +(cherry picked from commit b1e75376cc3adfc7da5502a277dfe9711f3e0536) +Reviewed-by: Qt Cherry-pick Bot +(cherry picked from commit 0fb43e4395da34d561814242a0186999e4956e28) +--- + +diff --git a/src/network/access/qhttp2protocolhandler.cpp b/src/network/access/qhttp2protocolhandler.cpp +index 0abd99b..3631b13 100644 +--- a/src/network/access/qhttp2protocolhandler.cpp ++++ b/src/network/access/qhttp2protocolhandler.cpp +@@ -303,12 +303,12 @@ + } + } + +- if (!prefaceSent && !sendClientPreface()) +- return false; +- + if (!requests.size()) + return true; + ++ if (!prefaceSent && !sendClientPreface()) ++ return false; ++ + m_channel->state = QHttpNetworkConnectionChannel::WritingState; + // Check what was promised/pushed, maybe we do not have to send a request + // and have a response already? +diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp +index 6766989..1e4161d 100644 +--- a/src/network/access/qhttpnetworkconnectionchannel.cpp ++++ b/src/network/access/qhttpnetworkconnectionchannel.cpp +@@ -209,6 +209,10 @@ + bool QHttpNetworkConnectionChannel::sendRequest() + { + Q_ASSERT(protocolHandler); ++ if (waitingForPotentialAbort) { ++ needInvokeSendRequest = true; ++ return false; // this return value is unused ++ } + return protocolHandler->sendRequest(); + } + +@@ -221,21 +225,28 @@ + void QHttpNetworkConnectionChannel::sendRequestDelayed() + { + QMetaObject::invokeMethod(this, [this] { +- Q_ASSERT(protocolHandler); + if (reply) +- protocolHandler->sendRequest(); ++ sendRequest(); + }, Qt::ConnectionType::QueuedConnection); + } + + void QHttpNetworkConnectionChannel::_q_receiveReply() + { + Q_ASSERT(protocolHandler); ++ if (waitingForPotentialAbort) { ++ needInvokeReceiveReply = true; ++ return; ++ } + protocolHandler->_q_receiveReply(); + } + + void QHttpNetworkConnectionChannel::_q_readyRead() + { + Q_ASSERT(protocolHandler); ++ if (waitingForPotentialAbort) { ++ needInvokeReadyRead = true; ++ return; ++ } + protocolHandler->_q_readyRead(); + } + +@@ -1239,7 +1250,18 @@ + if (!h2RequestsToSend.isEmpty()) { + // Similar to HTTP/1.1 counterpart below: + const auto &pair = std::as_const(h2RequestsToSend).first(); ++ waitingForPotentialAbort = true; + emit pair.second->encrypted(); ++ ++ // We don't send or handle any received data until any effects from ++ // emitting encrypted() have been processed. This is necessary ++ // because the user may have called abort(). We may also abort the ++ // whole connection if the request has been aborted and there is ++ // no more requests to send. ++ QMetaObject::invokeMethod(this, ++ &QHttpNetworkConnectionChannel::checkAndResumeCommunication, ++ Qt::QueuedConnection); ++ + // In case our peer has sent us its settings (window size, max concurrent streams etc.) + // let's give _q_receiveReply a chance to read them first ('invokeMethod', QueuedConnection). + } +@@ -1257,6 +1279,28 @@ + QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection); + } + ++ ++void QHttpNetworkConnectionChannel::checkAndResumeCommunication() ++{ ++ Q_ASSERT(connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2 ++ || connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct); ++ ++ // Because HTTP/2 requires that we send a SETTINGS frame as the first thing we do, and respond ++ // to a SETTINGS frame with an ACK, we need to delay any handling until we can ensure that any ++ // effects from emitting encrypted() have been processed. ++ // This function is called after encrypted() was emitted, so check for changes. ++ ++ if (!reply && h2RequestsToSend.isEmpty()) ++ abort(); ++ waitingForPotentialAbort = false; ++ if (needInvokeReadyRead) ++ _q_readyRead(); ++ if (needInvokeReceiveReply) ++ _q_receiveReply(); ++ if (needInvokeSendRequest) ++ sendRequest(); ++} ++ + void QHttpNetworkConnectionChannel::requeueHttp2Requests() + { + const auto h2RequestsToSendCopy = std::exchange(h2RequestsToSend, {}); +diff --git a/src/network/access/qhttpnetworkconnectionchannel_p.h b/src/network/access/qhttpnetworkconnectionchannel_p.h +index c42290f..061f20f 100644 +--- a/src/network/access/qhttpnetworkconnectionchannel_p.h ++++ b/src/network/access/qhttpnetworkconnectionchannel_p.h +@@ -74,6 +74,10 @@ + QAbstractSocket *socket; + bool ssl; + bool isInitialized; ++ bool waitingForPotentialAbort = false; ++ bool needInvokeReceiveReply = false; ++ bool needInvokeReadyRead = false; ++ bool needInvokeSendRequest = false; + ChannelState state; + QHttpNetworkRequest request; // current request, only used for HTTP + QHttpNetworkReply *reply; // current reply for this request, only used for HTTP +@@ -146,6 +150,8 @@ + void closeAndResendCurrentRequest(); + void resendCurrentRequest(); + ++ void checkAndResumeCommunication(); ++ + bool isSocketBusy() const; + bool isSocketWriting() const; + bool isSocketWaiting() const; +diff --git a/tests/auto/network/access/http2/tst_http2.cpp b/tests/auto/network/access/http2/tst_http2.cpp +index 00efbc9..c02e7b7 100644 +--- a/tests/auto/network/access/http2/tst_http2.cpp ++++ b/tests/auto/network/access/http2/tst_http2.cpp +@@ -106,6 +106,8 @@ + + void duplicateRequestsWithAborts(); + ++ void abortOnEncrypted(); ++ + protected slots: + // Slots to listen to our in-process server: + void serverStarted(quint16 port); +@@ -1479,6 +1481,48 @@ + QCOMPARE(finishedCount, ExpectedSuccessfulRequests); + } + ++void tst_Http2::abortOnEncrypted() ++{ ++#if !QT_CONFIG(ssl) ++ QSKIP("TLS support is needed for this test"); ++#else ++ clearHTTP2State(); ++ serverPort = 0; ++ ++ ServerPtr targetServer(newServer(defaultServerSettings, H2Type::h2Direct)); ++ ++ QMetaObject::invokeMethod(targetServer.data(), "startServer", Qt::QueuedConnection); ++ runEventLoop(); ++ ++ nRequests = 1; ++ nSentRequests = 0; ++ ++ const auto url = requestUrl(H2Type::h2Direct); ++ QNetworkRequest request(url); ++ request.setAttribute(QNetworkRequest::Http2DirectAttribute, true); ++ ++ std::unique_ptr reply{manager->get(request)}; ++ reply->ignoreSslErrors(); ++ connect(reply.get(), &QNetworkReply::encrypted, reply.get(), [reply = reply.get()](){ ++ reply->abort(); ++ }); ++ connect(reply.get(), &QNetworkReply::errorOccurred, this, &tst_Http2::replyFinishedWithError); ++ ++ runEventLoop(); ++ STOP_ON_FAILURE ++ ++ QCOMPARE(nRequests, 0); ++ QCOMPARE(reply->error(), QNetworkReply::OperationCanceledError); ++ ++ const bool res = QTest::qWaitFor( ++ [this, server = targetServer.get()]() { ++ return serverGotSettingsACK || prefaceOK || nSentRequests > 0; ++ }, ++ 500); ++ QVERIFY(!res); ++#endif // QT_CONFIG(ssl) ++} ++ + void tst_Http2::serverStarted(quint16 port) + { + serverPort = port; diff --git a/contrib/depends/patches/qt/revert-f67ee7c39.patch b/contrib/depends/patches/qt/revert-f67ee7c39.patch new file mode 100644 index 0000000..a23e2b1 --- /dev/null +++ b/contrib/depends/patches/qt/revert-f67ee7c39.patch @@ -0,0 +1,55 @@ +diff --git a/src/multimedia/darwin/qdarwinmediadevices.mm b/src/multimedia/darwin/qdarwinmediadevices.mm +index b0a108935..3ab7e6c05 100644 +--- a/src/multimedia/darwin/qdarwinmediadevices.mm ++++ b/src/multimedia/darwin/qdarwinmediadevices.mm +@@ -39,11 +39,8 @@ static AudioDeviceID defaultAudioDevice(QAudioDevice::Mode mode) + { + const AudioObjectPropertySelector selector = (mode == QAudioDevice::Output) ? kAudioHardwarePropertyDefaultOutputDevice + : kAudioHardwarePropertyDefaultInputDevice; +- const AudioObjectPropertyAddress propertyAddress = { +- selector, +- kAudioObjectPropertyScopeGlobal, +- kAudioObjectPropertyElementMain, +- }; ++ const AudioObjectPropertyAddress propertyAddress = { selector, kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster }; + + if (auto audioDevice = getAudioObject(kAudioObjectSystemObject, propertyAddress, + "Default Device")) { +@@ -77,7 +74,7 @@ static QList availableAudioDevices(QAudioDevice::Mode mode) + + const AudioObjectPropertyAddress audioDevicesPropertyAddress = { + kAudioHardwarePropertyDevices, kAudioObjectPropertyScopeGlobal, +- kAudioObjectPropertyElementMain ++ kAudioObjectPropertyElementMaster + }; + + if (auto audioDevices = getAudioData( +@@ -130,11 +127,11 @@ static OSStatus audioDeviceChangeListener(AudioObjectID id, UInt32, + + static constexpr AudioObjectPropertyAddress listenerAddresses[] = { + { kAudioHardwarePropertyDefaultInputDevice, kAudioObjectPropertyScopeGlobal, +- kAudioObjectPropertyElementMain }, ++ kAudioObjectPropertyElementMaster }, + { kAudioHardwarePropertyDefaultOutputDevice, kAudioObjectPropertyScopeGlobal, +- kAudioObjectPropertyElementMain }, ++ kAudioObjectPropertyElementMaster }, + { kAudioHardwarePropertyDevices, kAudioObjectPropertyScopeGlobal, +- kAudioObjectPropertyElementMain } ++ kAudioObjectPropertyElementMaster } + }; + + static void setAudioListeners(QDarwinMediaDevices &instance) +diff --git a/src/multimedia/darwin/qmacosaudiodatautils_p.h b/src/multimedia/darwin/qmacosaudiodatautils_p.h +index 8cc2f8440..5cd6fced2 100644 +--- a/src/multimedia/darwin/qmacosaudiodatautils_p.h ++++ b/src/multimedia/darwin/qmacosaudiodatautils_p.h +@@ -44,7 +44,7 @@ void printUnableToReadWarning(const char *logName, AudioObjectID objectID, const + + inline static AudioObjectPropertyAddress + makePropertyAddress(AudioObjectPropertySelector selector, QAudioDevice::Mode mode, +- AudioObjectPropertyElement element = kAudioObjectPropertyElementMain) ++ AudioObjectPropertyElement element = kAudioObjectPropertyElementMaster) + { + return { selector, + mode == QAudioDevice::Input ? kAudioDevicePropertyScopeInput diff --git a/contrib/depends/patches/qt/v4l2.patch b/contrib/depends/patches/qt/v4l2.patch index 00d027a..c03cfa1 100644 --- a/contrib/depends/patches/qt/v4l2.patch +++ b/contrib/depends/patches/qt/v4l2.patch @@ -1,15 +1,15 @@ diff --git a/src/plugins/multimedia/CMakeLists.txt b/src/plugins/multimedia/CMakeLists.txt -index 978710112..1cb2cc730 100644 +index 5bc39c1f8..c74f2ff4c 100644 --- a/src/plugins/multimedia/CMakeLists.txt +++ b/src/plugins/multimedia/CMakeLists.txt @@ -2,7 +2,7 @@ # SPDX-License-Identifier: BSD-3-Clause - if (QT_FEATURE_ffmpeg) + if(QT_FEATURE_ffmpeg) - add_subdirectory(ffmpeg) + add_subdirectory(v4l2) - endif () - if (QT_FEATURE_gstreamer) + endif() + if(QT_FEATURE_gstreamer) add_subdirectory(gstreamer) diff --git a/src/plugins/multimedia/v4l2/CMakeLists.txt b/src/plugins/multimedia/v4l2/CMakeLists.txt new file mode 100644 @@ -672,10 +672,10 @@ index 000000000..e34005bbf +#endif diff --git a/src/plugins/multimedia/v4l2/qffmpegmediaintegration.cpp b/src/plugins/multimedia/v4l2/qffmpegmediaintegration.cpp new file mode 100644 -index 000000000..2dad447c9 +index 000000000..63a8ff196 --- /dev/null +++ b/src/plugins/multimedia/v4l2/qffmpegmediaintegration.cpp -@@ -0,0 +1,130 @@ +@@ -0,0 +1,131 @@ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + @@ -724,6 +724,7 @@ index 000000000..2dad447c9 +}; + +QFFmpegMediaIntegration::QFFmpegMediaIntegration() ++ : QPlatformMediaIntegration(QLatin1String("ffmpeg")) +{ +#ifndef QT_NO_DEBUG + qDebug() << "Available HW decoding frameworks:"; @@ -1043,7 +1044,7 @@ index 000000000..cbaa810d7 +#endif diff --git a/src/plugins/multimedia/v4l2/qv4l2camera.cpp b/src/plugins/multimedia/v4l2/qv4l2camera.cpp new file mode 100644 -index 000000000..2086af10d +index 000000000..1ba05364d --- /dev/null +++ b/src/plugins/multimedia/v4l2/qv4l2camera.cpp @@ -0,0 +1,707 @@ @@ -1443,7 +1444,7 @@ index 000000000..2086af10d +void QV4L2Camera::setCameraBusy() +{ + m_cameraBusy = true; -+ emit error(QCamera::CameraError, QLatin1String("Camera is in use")); ++ updateError(QCamera::CameraError, QLatin1String("Camera is in use")); +} + +void QV4L2Camera::initV4L2Controls() @@ -1461,7 +1462,7 @@ index 000000000..2086af10d + qCWarning(qLcV4L2Camera) << "Unable to open the camera" << deviceName + << "for read to query the parameter info:" + << qt_error_string(errno); -+ emit error(QCamera::CameraError, QLatin1String("Cannot open camera")); ++ updateError(QCamera::CameraError, QLatin1String("Cannot open camera")); + return; + } + @@ -1700,7 +1701,7 @@ index 000000000..2086af10d + + if (!m_memoryTransfer) { + qCWarning(qLcV4L2Camera) << "Cannot init v4l2 memory transfer," << qt_error_string(errno); -+ emit error(QCamera::CameraError, QLatin1String("Cannot init V4L2 memory transfer")); ++ updateError(QCamera::CameraError, QLatin1String("Cannot init V4L2 memory transfer")); + } +} + diff --git a/contrib/depends/patches/unbound/disable-glibc-reallocarray.patch b/contrib/depends/patches/unbound/disable-glibc-reallocarray.patch deleted file mode 100644 index d66a821..0000000 --- a/contrib/depends/patches/unbound/disable-glibc-reallocarray.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/configure.ac b/configure.ac -index 5c7da197..e2b25288 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -1702,6 +1702,9 @@ AC_LINK_IFELSE([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT - #ifndef _OPENBSD_SOURCE - #define _OPENBSD_SOURCE 1 - #endif -+#ifdef __linux__ -+# error reallocarray() is currently disabled on Linux to support glibc < 2.26 -+#endif - #include - int main(void) { - void* p = reallocarray(NULL, 10, 100); diff --git a/contrib/flatpak/make_runtime.sh b/contrib/flatpak/make_runtime.sh index accf37e..732cf80 100644 --- a/contrib/flatpak/make_runtime.sh +++ b/contrib/flatpak/make_runtime.sh @@ -6,6 +6,10 @@ cd empty mkdir export files usr +# Needs to exists, otherwise flatpak doesn't mount zoneinfo +# https://github.com/flatpak/flatpak/blob/8b4f523c4f8287d57f1a84a3a8216efe200c5fbf/common/flatpak-run.c#L1605 +mkdir -p usr/share/zoneinfo + cat << EOF > metadata [Runtime] name=org.featherwallet.Empty diff --git a/contrib/guix/libexec/prelude.bash b/contrib/guix/libexec/prelude.bash index a44621b..b81799f 100644 --- a/contrib/guix/libexec/prelude.bash +++ b/contrib/guix/libexec/prelude.bash @@ -51,7 +51,7 @@ fi time-machine() { # shellcheck disable=SC2086 guix time-machine --url=https://github.com/tobtoht/guix.git \ - --commit=dc4842797bfdc5f9f3f5f725bf189c2b68bd6b5a \ + --commit=f0bb724211872cd6158fce6162e0b8c73efed126 \ --cores="$JOBS" \ --keep-failed \ --fallback \ diff --git a/contrib/guix/manifest.scm b/contrib/guix/manifest.scm index 17948de..db968ac 100644 --- a/contrib/guix/manifest.scm +++ b/contrib/guix/manifest.scm @@ -104,7 +104,7 @@ chain for " target " development.")) #:key (base-gcc-for-libc linux-base-gcc) (base-kernel-headers base-linux-kernel-headers) - (base-libc glibc-2.27) + (base-libc glibc-2.31) (base-gcc linux-base-gcc)) "Convenience wrapper around MAKE-CROSS-TOOLCHAIN with default values desirable for building Feather Wallet release binaries." @@ -181,22 +181,21 @@ chain for " target " development.")) (("-rpath=") "-rpath-link=")) #t)))))))) -(define-public glibc-2.27 +(define-public glibc-2.31 + (let ((commit "8e30f03744837a85e33d84ccd34ed3abe30d37c3")) (package - (inherit glibc-2.31) - (version "2.27") + (inherit glibc) ;; 2.35 + (version "2.31") (source (origin (method git-fetch) (uri (git-reference (url "https://sourceware.org/git/glibc.git") - (commit "73886db6218e613bd6d4edf529f11e008a6c2fa6"))) - (file-name (git-file-name "glibc" "73886db6218e613bd6d4edf529f11e008a6c2fa6")) + (commit commit))) + (file-name (git-file-name "glibc" commit)) (sha256 (base32 - "0azpb9cvnbv25zg8019rqz48h8i2257ngyjg566dlnp74ivrs9vq")) - (patches (search-our-patches "glibc-2.27-riscv64-Use-__has_include-to-include-asm-syscalls.h.patch" - "glibc-2.27-fcommon.patch" - "glibc-2.27-no-librt.patch")))) + "1zi0s9yy5zkisw823vivn7zlj8w6g9p3mm7lmlqiixcxdkz4dbn6")) + (patches (search-our-patches "glibc-guix-prefix.patch")))) (arguments (substitute-keyword-arguments (package-arguments glibc) ((#:configure-flags flags) @@ -212,12 +211,13 @@ chain for " target " development.")) (lambda* (#:key outputs #:allow-other-keys) ;; Install the rpc data base file under `$out/etc/rpc'. ;; Otherwise build will fail with "Permission denied." + ;; Can be removed when we are building 2.32 or later. (let ((out (assoc-ref outputs "out"))) (substitute* "sunrpc/Makefile" (("^\\$\\(inst_sysconfdir\\)/rpc(.*)$" _ suffix) (string-append out "/etc/rpc" suffix "\n")) (("^install-others =.*$") - (string-append "install-others = " out "/etc/rpc\n")))))))))))) + (string-append "install-others = " out "/etc/rpc\n"))))))))))))) (define-public ldid (package diff --git a/contrib/guix/patches/glibc-2.27-fcommon.patch b/contrib/guix/patches/glibc-2.27-fcommon.patch deleted file mode 100644 index f3baaca..0000000 --- a/contrib/guix/patches/glibc-2.27-fcommon.patch +++ /dev/null @@ -1,32 +0,0 @@ -commit 264a4a0dbe1f4369db315080034b500bed66016c -Author: fanquake -Date: Fri May 6 11:03:04 2022 +0100 - - build: use -fcommon to retain legacy behaviour with GCC 10 - - GCC 10 started using -fno-common by default, which causes issues with - the powerpc builds using gibc 2.24. A patch was commited to glibc to fix - the issue, 18363b4f010da9ba459b13310b113ac0647c2fcc but is non-trvial - to backport, and was broken in at least one way, see the followup in - commit 7650321ce037302bfc2f026aa19e0213b8d02fe6. - - For now, retain the legacy GCC behaviour by passing -fcommon when - building glibc. - - https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html. - https://sourceware.org/git/?p=glibc.git;a=commit;h=18363b4f010da9ba459b13310b113ac0647c2fcc - https://sourceware.org/git/?p=glibc.git;a=commit;h=7650321ce037302bfc2f026aa19e0213b8d02fe6 - -diff --git a/Makeconfig b/Makeconfig -index 86a71e5802..aa2166be60 100644 ---- a/Makeconfig -+++ b/Makeconfig -@@ -896,7 +896,7 @@ ifeq "$(strip $(+cflags))" "" - endif # $(+cflags) == "" - - +cflags += $(cflags-cpu) $(+gccwarn) $(+merge-constants) $(+math-flags) \ -- $(+stack-protector) -+ $(+stack-protector) -fcommon - +gcc-nowarn := -w - - # Don't duplicate options if we inherited variables from the parent. diff --git a/contrib/guix/patches/glibc-2.27-no-librt.patch b/contrib/guix/patches/glibc-2.27-no-librt.patch deleted file mode 100644 index 4f2092b..0000000 --- a/contrib/guix/patches/glibc-2.27-no-librt.patch +++ /dev/null @@ -1,53 +0,0 @@ -This patch can be dropped when we are building with glibc 2.30+. - -commit 6e41ef56c9baab719a02f1377b1e7ce7bff61e73 -Author: Florian Weimer -Date: Fri Feb 8 10:21:56 2019 +0100 - - rt: Turn forwards from librt to libc into compat symbols [BZ #24194] - - As the result of commit 6e6249d0b461b952d0f544792372663feb6d792a - ("BZ#14743: Move clock_* symbols from librt to libc."), in glibc 2.17, - clock_gettime, clock_getres, clock_settime, clock_getcpuclockid, - clock_nanosleep were added to libc, and the file rt/clock-compat.c - was added with forwarders to the actual implementations in libc. - These forwarders were wrapped in - - #if SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_17) - - so that they are not present for newer architectures (such as - powerpc64le) with a 2.17 or later ABI baseline. But the forwarders - were not marked as compatibility symbols. As a result, on older - architectures, historic configure checks such as - - AC_CHECK_LIB(rt, clock_gettime) - - still cause linking against librt, even though this is completely - unnecessary. It also creates a needless porting hazard because - architectures behave differently when it comes to symbol availability. - - Reviewed-by: Carlos O'Donell - -diff --git a/rt/clock-compat.c b/rt/clock-compat.c -index f816973c05..11e71aa890 100644 ---- a/rt/clock-compat.c -+++ b/rt/clock-compat.c -@@ -30,14 +30,16 @@ - #if HAVE_IFUNC - # undef INIT_ARCH - # define INIT_ARCH() --# define COMPAT_REDIRECT(name, proto, arglist) libc_ifunc (name, &__##name) -+# define COMPAT_REDIRECT(name, proto, arglist) libc_ifunc (name, &__##name) \ -+ compat_symbol (librt, name, name, GLIBC_2_2); - #else - # define COMPAT_REDIRECT(name, proto, arglist) \ - int \ - name proto \ - { \ - return __##name arglist; \ -- } -+ } \ -+ compat_symbol (librt, name, name, GLIBC_2_2); - #endif - - COMPAT_REDIRECT (clock_getres, diff --git a/contrib/guix/patches/glibc-2.27-riscv64-Use-__has_include-to-include-asm-syscalls.h.patch b/contrib/guix/patches/glibc-2.27-riscv64-Use-__has_include-to-include-asm-syscalls.h.patch deleted file mode 100644 index c0f8495..0000000 --- a/contrib/guix/patches/glibc-2.27-riscv64-Use-__has_include-to-include-asm-syscalls.h.patch +++ /dev/null @@ -1,76 +0,0 @@ -Note that this has been modified from the original commit, to use __has_include -instead of __has_include__, as the later was causing build failures with GCC 10. -See also: http://lists.busybox.net/pipermail/buildroot/2020-July/590376.html. - -https://sourceware.org/git/?p=glibc.git;a=commit;h=0b9c84906f653978fb8768c7ebd0ee14a47e662e - -From 562c52cc81a4e456a62e6455feb32732049e9070 Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Mon, 31 Dec 2018 09:26:42 -0800 -Subject: [PATCH] riscv: Use __has_include__ to include [BZ - #24022] - - has been removed by - -commit 27f8899d6002e11a6e2d995e29b8deab5aa9cc25 -Author: David Abdurachmanov -Date: Thu Nov 8 20:02:39 2018 +0100 - - riscv: add asm/unistd.h UAPI header - - Marcin Juszkiewicz reported issues while generating syscall table for riscv - using 4.20-rc1. The patch refactors our unistd.h files to match some other - architectures. - - - Add asm/unistd.h UAPI header, which has __ARCH_WANT_NEW_STAT only for 64-bit - - Remove asm/syscalls.h UAPI header and merge to asm/unistd.h - - Adjust kernel asm/unistd.h - - So now asm/unistd.h UAPI header should show all syscalls for riscv. - - may be restored by - -Subject: [PATCH] riscv: restore asm/syscalls.h UAPI header -Date: Tue, 11 Dec 2018 09:09:35 +0100 - -UAPI header asm/syscalls.h was merged into UAPI asm/unistd.h header, -which did resolve issue with missing syscalls macros resulting in -glibc (2.28) build failure. It also broke glibc in a different way: -asm/syscalls.h is being used by glibc. I noticed this while doing -Fedora 30/Rawhide mass rebuild. - -The patch returns asm/syscalls.h header and incl. it into asm/unistd.h. -I plan to send a patch to glibc to use asm/unistd.h instead of -asm/syscalls.h - -In the meantime, we use __has_include__, which was added to GCC 5, to -check if exists before including it. Tested with -build-many-glibcs.py for riscv against kernel 4.19.12 and 4.20-rc7. - - [BZ #24022] - * sysdeps/unix/sysv/linux/riscv/flush-icache.c: Check if - exists with __has_include__ before including it. ---- - sysdeps/unix/sysv/linux/riscv/flush-icache.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/sysdeps/unix/sysv/linux/riscv/flush-icache.c b/sysdeps/unix/sysv/linux/riscv/flush-icache.c -index d612ef4c6c..0b2042620b 100644 ---- a/sysdeps/unix/sysv/linux/riscv/flush-icache.c -+++ b/sysdeps/unix/sysv/linux/riscv/flush-icache.c -@@ -21,7 +21,11 @@ - #include - #include - #include --#include -+#if __has_include () -+# include -+#else -+# include -+#endif - - typedef int (*func_type) (void *, void *, unsigned long int); - --- -2.31.1 - diff --git a/contrib/guix/patches/glibc-2.27-guix-prefix.patch b/contrib/guix/patches/glibc-guix-prefix.patch similarity index 100% rename from contrib/guix/patches/glibc-2.27-guix-prefix.patch rename to contrib/guix/patches/glibc-guix-prefix.patch diff --git a/monero b/monero index ad951be..6a88faa 160000 --- a/monero +++ b/monero @@ -1 +1 @@ -Subproject commit ad951be2edfb3045ec3d0bb74a25badb91bc8b92 +Subproject commit 6a88faa9af20c56363bac563a5c0b803ea2695dd diff --git a/src/ContactsWidget.cpp b/src/ContactsWidget.cpp index 5c6b77d..9ad508e 100644 --- a/src/ContactsWidget.cpp +++ b/src/ContactsWidget.cpp @@ -96,7 +96,8 @@ void ContactsWidget::copyName() { void ContactsWidget::payTo() { QModelIndex index = ui->contacts->currentIndex(); QString address = index.model()->data(index.siblingAtColumn(AddressBookModel::Address), Qt::UserRole).toString(); - emit fillAddress(address); + QString description = index.model()->data(index.siblingAtColumn(AddressBookModel::Description), Qt::UserRole).toString(); + emit fill(address, description); } void ContactsWidget::setShowFullAddresses(bool show) { diff --git a/src/ContactsWidget.h b/src/ContactsWidget.h index 6f6c1b5..d6c8291 100644 --- a/src/ContactsWidget.h +++ b/src/ContactsWidget.h @@ -37,7 +37,7 @@ public slots: void setSearchFilter(const QString &filter); signals: - void fillAddress(QString &address); + void fill(QString &address, QString &description); private slots: void showHeaderMenu(const QPoint &position); diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 62c880b..ad4f88e 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -237,7 +237,9 @@ void MainWindow::initWidgets() { m_historyWidget->setSearchText(text); ui->tabWidget->setCurrentIndex(this->findTab("History")); }); - connect(m_contactsWidget, &ContactsWidget::fillAddress, m_sendWidget, &SendWidget::fillAddress); + connect(m_contactsWidget, &ContactsWidget::fill, [this](const QString &address, const QString &description){ + m_sendWidget->fill(address, description, 0, true); + }); // [Coins] m_coinsWidget = new CoinsWidget(m_wallet, this); diff --git a/src/SendWidget.cpp b/src/SendWidget.cpp index 36a7d75..a00c2cf 100644 --- a/src/SendWidget.cpp +++ b/src/SendWidget.cpp @@ -112,11 +112,13 @@ void SendWidget::fill(double amount) { ui->lineAmount->setText(QString::number(amount)); } -void SendWidget::fill(const QString &address, const QString &description, double amount) { +void SendWidget::fill(const QString &address, const QString &description, double amount, bool overrideDescription) { ui->lineAddress->setText(address); ui->lineAddress->moveCursor(QTextCursor::Start); - ui->lineDescription->setText(description); + if (overrideDescription || ui->lineDescription->text().isEmpty()) { + ui->lineDescription->setText(description); + } if (amount > 0) ui->lineAmount->setText(QString::number(amount)); diff --git a/src/SendWidget.h b/src/SendWidget.h index fa7c78d..1fece10 100644 --- a/src/SendWidget.h +++ b/src/SendWidget.h @@ -18,7 +18,7 @@ Q_OBJECT public: explicit SendWidget(Wallet *wallet, QWidget *parent = nullptr); - void fill(const QString &address, const QString &description, double amount = 0); + void fill(const QString &address, const QString &description, double amount = 0, bool overrideDescription = true); void fill(double amount); void clearFields(); void payToMany(); diff --git a/src/WindowManager.cpp b/src/WindowManager.cpp index 6a06fad..6a37a62 100644 --- a/src/WindowManager.cpp +++ b/src/WindowManager.cpp @@ -371,6 +371,8 @@ void WindowManager::tryCreateWallet(Seed seed, const QString &path, const QStrin wallet->setCacheAttribute("feather.seed", seed.mnemonic.join(" ")); wallet->setCacheAttribute("feather.seedoffset", seedOffset); + // Store attributes now, so we don't lose them on crash / forced exit + wallet->store(); if (newWallet) { wallet->setNewWallet(); diff --git a/src/assets/ack.txt b/src/assets/ack.txt index 574ccb8..7011ffd 100644 --- a/src/assets/ack.txt +++ b/src/assets/ack.txt @@ -76,7 +76,6 @@ sethsimmons Shakybeats SmashTR SovereignStreetArt -spoontechtips stickyf00t strace tevador diff --git a/src/assets/restore_heights_monero_mainnet.txt b/src/assets/restore_heights_monero_mainnet.txt index 478bd2c..65cd546 100644 --- a/src/assets/restore_heights_monero_mainnet.txt +++ b/src/assets/restore_heights_monero_mainnet.txt @@ -2066,4 +2066,79 @@ 1709534527:3097500 1709716289:3099000 1709892940:3100500 -1710071409:3102000 \ No newline at end of file +1710071409:3102000 +1710255097:3103500 +1710432606:3105000 +1710615410:3106500 +1710795065:3108000 +1710976109:3109500 +1711152408:3111000 +1711335265:3112500 +1711516323:3114000 +1711694909:3115500 +1711880054:3117000 +1712059470:3118500 +1712236145:3120000 +1712419759:3121500 +1712597840:3123000 +1712781127:3124500 +1712958802:3126000 +1713135962:3127500 +1713316678:3129000 +1713503744:3130500 +1713676680:3132000 +1713858900:3133500 +1714041253:3135000 +1714217386:3136500 +1714396919:3138000 +1714576890:3139500 +1714757796:3141000 +1714939811:3142500 +1715118316:3144000 +1715299757:3145500 +1715478761:3147000 +1715656179:3148500 +1715838106:3150000 +1716017126:3151500 +1716196273:3153000 +1716373096:3154500 +1716552670:3156000 +1716732589:3157500 +1716908042:3159000 +1717109817:3160500 +1717288707:3162000 +1717469290:3163500 +1717645342:3165000 +1717819667:3166500 +1717997823:3168000 +1718180974:3169500 +1718358198:3171000 +1718535067:3172500 +1718708312:3174000 +1718889905:3175500 +1719067389:3177000 +1719247949:3178500 +1719430906:3180000 +1719620680:3181500 +1719797945:3183000 +1719976133:3184500 +1720160899:3186000 +1720342629:3187500 +1720519986:3189000 +1720701683:3190500 +1720881472:3192000 +1721058802:3193500 +1721241822:3195000 +1721420236:3196500 +1721603903:3198000 +1721785988:3199500 +1721964141:3201000 +1722143014:3202500 +1722327380:3204000 +1722505790:3205500 +1722682957:3207000 +1722861675:3208500 +1723042527:3210000 +1723220196:3211500 +1723401886:3213000 +1723577283:3214500 \ No newline at end of file diff --git a/src/assets/restore_heights_monero_stagenet.txt b/src/assets/restore_heights_monero_stagenet.txt index ff817e0..932d14e 100644 --- a/src/assets/restore_heights_monero_stagenet.txt +++ b/src/assets/restore_heights_monero_stagenet.txt @@ -1040,4 +1040,72 @@ 1709585920:1558500 1709759746:1560000 1709952785:1561500 -1710055215:1563000 \ No newline at end of file +1710055215:1563000 +1710257276:1564500 +1711028944:1566000 +1711189415:1567500 +1711852389:1569000 +1712019430:1570500 +1712195259:1572000 +1712387277:1573500 +1712553502:1575000 +1712770163:1576500 +1712962539:1578000 +1713119443:1579500 +1713314139:1581000 +1713504130:1582500 +1713694372:1584000 +1713869222:1585500 +1714049033:1587000 +1714218128:1588500 +1714398252:1590000 +1714561751:1591500 +1714776182:1593000 +1714952164:1594500 +1715136648:1596000 +1715318231:1597500 +1715497199:1599000 +1715660837:1600500 +1715841315:1602000 +1716048980:1603500 +1716224906:1605000 +1716410114:1606500 +1716590438:1608000 +1716769078:1609500 +1716948695:1611000 +1717128222:1612500 +1717298347:1614000 +1717487344:1615500 +1717670988:1617000 +1717851467:1618500 +1718031223:1620000 +1718209607:1621500 +1718394771:1623000 +1718558906:1624500 +1718754325:1626000 +1718878017:1627500 +1719199738:1629000 +1719379121:1630500 +1719560968:1632000 +1719748533:1633500 +1719923678:1635000 +1720103101:1636500 +1720281849:1638000 +1720454676:1639500 +1720640815:1641000 +1720822608:1642500 +1721006310:1644000 +1721182711:1645500 +1721360475:1647000 +1721542623:1648500 +1721724918:1650000 +1721904235:1651500 +1722082879:1653000 +1722260219:1654500 +1722447582:1656000 +1722623443:1657500 +1722805689:1659000 +1722983267:1660500 +1723166957:1662000 +1723347339:1663500 +1723524898:1665000 \ No newline at end of file