From b05361653e4be39ea43419cf672acd691cc10ac3 Mon Sep 17 00:00:00 2001 From: SChernykh <15806605+SChernykh@users.noreply.github.com> Date: Sun, 8 Mar 2026 20:30:07 +0100 Subject: [PATCH] More cleanup and tests --- .github/workflows/c-cpp.yml | 14 +++++++------- .github/workflows/test-sync.yml | 6 +++--- src/i2p.cpp | 7 +++---- src/util.cpp | 2 +- src/util.h | 2 ++ tests/cmake/msvc_libs.cmake | 1 + tests/src/i2p_tests.cpp | 30 +++++++++++++++++++++++------- 7 files changed, 40 insertions(+), 22 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index f1b6c68..9148433 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -53,7 +53,7 @@ jobs: cd external/src/libuv mkdir build cd build - cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF + cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF -DENABLE_CLANG_TIDY=OFF make -j$(nproc) - name: Build libzmq @@ -204,7 +204,7 @@ jobs: cd external/src/libuv mkdir build cd build - cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF + cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF -DENABLE_CLANG_TIDY=OFF make -j$(nproc) - name: Build libzmq @@ -281,7 +281,7 @@ jobs: cd external/src/libuv mkdir build cd build - cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF + cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF -DENABLE_CLANG_TIDY=OFF make -j$(nproc) - name: Build libzmq @@ -368,7 +368,7 @@ jobs: cd external/src/libuv mkdir build cd build - cmake .. -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" -DCMAKE_C_COMPILER=${{ matrix.config.c }} -DCMAKE_C_FLAGS='-Os ${{ matrix.config.flags }}' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF + cmake .. -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" -DCMAKE_C_COMPILER=${{ matrix.config.c }} -DCMAKE_C_FLAGS='-Os ${{ matrix.config.flags }}' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF -DENABLE_CLANG_TIDY=OFF make -j$(nproc) - name: Build libzmq @@ -507,7 +507,7 @@ jobs: cd external/src/libuv mkdir build cd build - cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS='-Os -flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF + cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS='-Os -flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF -DENABLE_CLANG_TIDY=OFF make -j4 - name: Build libzmq @@ -574,7 +574,7 @@ jobs: cd external/src/libuv mkdir build cd build - cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS='-Os -target arm64-apple-macos-11' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF + cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS='-Os -target arm64-apple-macos-11' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF -DENABLE_CLANG_TIDY=OFF make -j3 - name: Build libzmq @@ -660,7 +660,7 @@ jobs: cd ../libuv mkdir build cd build - cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS='-Os -flto' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF + cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS='-Os -flto' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF -DENABLE_CLANG_TIDY=OFF make -j4 cd ../../libzmq mkdir build diff --git a/.github/workflows/test-sync.yml b/.github/workflows/test-sync.yml index 14ec5ae..c3edba6 100644 --- a/.github/workflows/test-sync.yml +++ b/.github/workflows/test-sync.yml @@ -42,7 +42,7 @@ jobs: cd external/src/libuv mkdir build cd build - cmake .. -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_C_FLAGS='-fsanitize=thread -Og -fno-omit-frame-pointer -g' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF + cmake .. -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_C_FLAGS='-fsanitize=thread -Og -fno-omit-frame-pointer -g' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF -DENABLE_CLANG_TIDY=OFF make -j$(nproc) - name: Build libzmq @@ -133,7 +133,7 @@ jobs: cd external/src/libuv mkdir build cd build - cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang-21 -DCMAKE_C_FLAGS='-fsanitize=memory -fsanitize-recover -fsanitize-memory-track-origins -O0 -fno-omit-frame-pointer -g3' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF + cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang-21 -DCMAKE_C_FLAGS='-fsanitize=memory -fsanitize-recover -fsanitize-memory-track-origins -O0 -fno-omit-frame-pointer -g3' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF -DENABLE_CLANG_TIDY=OFF make -j$(nproc) - name: Build libzmq @@ -372,7 +372,7 @@ jobs: cd external/src/libuv mkdir build cd build - cmake .. -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS='${{ matrix.config.flags }}' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF + cmake .. -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS='${{ matrix.config.flags }}' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF -DENABLE_CLANG_TIDY=OFF make -j4 - name: Build libzmq diff --git a/src/i2p.cpp b/src/i2p.cpp index f350294..df5601d 100644 --- a/src/i2p.cpp +++ b/src/i2p.cpp @@ -17,6 +17,7 @@ */ #include "common.h" +#include "util.h" #include "i2p.h" LOG_CATEGORY(I2P) @@ -35,9 +36,7 @@ hash from_i2p_b32(const std::string& address) return {}; } - size_t pos = address.find('.'); - const std::string dest_hash = address.substr(0, pos); - const hash result = from_i2p_b32_const(dest_hash.c_str()); + const hash result = from_i2p_b32_const(address.c_str()); if (result.empty()) { LOGWARN(3, "Invalid I2P address \"" << address << "\": has invalid character(s)"); @@ -65,7 +64,7 @@ std::string to_i2p_b32(const hash& dest_hash) while (bit_size >= 5) { bit_size -= 5; - result += "abcdefghijklmnopqrstuvwxyz234567"[(data >> bit_size) & 31]; + result += base32_alphabet[(data >> bit_size) & 31]; } } diff --git a/src/util.cpp b/src/util.cpp index bae90b9..3834e7c 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -986,7 +986,7 @@ std::string to_onion_v3(const hash& pubkey) while (bit_size >= 5) { bit_size -= 5; - result += "abcdefghijklmnopqrstuvwxyz234567"[(data >> bit_size) & 31]; + result += base32_alphabet[(data >> bit_size) & 31]; } } diff --git a/src/util.h b/src/util.h index 3b9ee93..97f7cb9 100644 --- a/src/util.h +++ b/src/util.h @@ -407,6 +407,8 @@ FORCEINLINE std::string tolower(const std::string& s) return result; } +constexpr char base32_alphabet[] = "abcdefghijklmnopqrstuvwxyz234567"; + std::string to_onion_v3(const hash& pubkey); hash from_onion_v3(const std::string& address); diff --git a/tests/cmake/msvc_libs.cmake b/tests/cmake/msvc_libs.cmake index 8f8b6c5..c0fa81c 100644 --- a/tests/cmake/msvc_libs.cmake +++ b/tests/cmake/msvc_libs.cmake @@ -13,6 +13,7 @@ set(WITH_DOCS OFF CACHE BOOL "") set(ENABLE_DRAFTS OFF CACHE BOOL "") set(BUILD_SHARED OFF CACHE BOOL "") set(ENABLE_CLANG OFF CACHE BOOL "") +set(ENABLE_CLANG_TIDY OFF CACHE BOOL "") set(CURL_TARGET_WINDOWS_VERSION "0x0600" CACHE STRING "") set(BUILD_CURL_EXE OFF CACHE BOOL "") diff --git a/tests/src/i2p_tests.cpp b/tests/src/i2p_tests.cpp index e788468..06cb74d 100644 --- a/tests/src/i2p_tests.cpp +++ b/tests/src/i2p_tests.cpp @@ -24,19 +24,35 @@ namespace p2pool { TEST(i2p, decode_encode) { - const std::string addr1 = "vxghq7uoi3m5juvfk2otmxlh4qhwb42xdbytehtahqeksoclcetq.b32.i2p"; - const hash result1 = from_i2p_b32(addr1); - - const hash expected1{ + const hash expected{ 0xad, 0xcc, 0x78, 0x7e, 0x8e, 0x46, 0xd9, 0xd4, 0xd2, 0xa5, 0x56, 0x9d, 0x36, 0x5d, 0x67, 0xe4, 0x0f, 0x60, 0xf3, 0x57, 0x18, 0x71, 0x32, 0x1e, 0x60, 0x3c, 0x08, 0xa9, 0x38, 0x4b, 0x11, 0x27 }; - EXPECT_EQ(result1, expected1); - const std::string result2 = to_i2p_b32(result1); - EXPECT_EQ(result2, addr1); + const std::string addr1 = "vxghq7uoi3m5juvfk2otmxlh4qhwb42xdbytehtahqeksoclcetq.b32.i2p"; + const hash result1 = from_i2p_b32(addr1); + + EXPECT_EQ(result1, expected); + EXPECT_EQ(to_i2p_b32(result1), addr1); + + // Uppercase + const std::string addr2 = "VXGHQ7uoi3m5juvfk2otmxlh4qhwb42xdbytehtahqeksoclcetq.b32.i2p"; + EXPECT_EQ(from_i2p_b32(addr2), expected); + + // Invalid character + const std::string addr3 = "1xghq7uoi3m5juvfk2otmxlh4qhwb42xdbytehtahqeksoclcetq.b32.i2p"; + EXPECT_EQ(from_i2p_b32(addr3), hash()); + + // Too short + EXPECT_EQ(from_i2p_b32(""), hash()); + + // No suffix + EXPECT_EQ(from_i2p_b32("vxghq7uoi3m5juvfk2otmxlh4qhwb42xdbytehtahqeksoclcetq"), hash()); + + // Too long + EXPECT_EQ(from_i2p_b32("vxghq7uoi3m5juvfk2otmxlh4qhwb42xdbytehtahqeksoclcetq2.b32.i2p"), hash()); } } // namespace p2pool