diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index a8caa64..e484300 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -5,7 +5,7 @@ on: [push, pull_request] jobs: lint: runs-on: ubuntu-latest - container: gitea.tap-tap.win/taptap/fastsync-ci:v7 + container: gitea.tap-tap.win/taptap/fastsync-ci:v8 steps: - name: Checkout uses: actions/checkout@v4 @@ -18,7 +18,7 @@ jobs: build-and-test: runs-on: ubuntu-latest - container: gitea.tap-tap.win/taptap/fastsync-ci:v7 + container: gitea.tap-tap.win/taptap/fastsync-ci:v8 needs: lint steps: - name: Checkout @@ -38,7 +38,7 @@ jobs: sanitizers: runs-on: ubuntu-latest - container: gitea.tap-tap.win/taptap/fastsync-ci:v7 + container: gitea.tap-tap.win/taptap/fastsync-ci:v8 needs: lint strategy: matrix: @@ -58,15 +58,12 @@ jobs: fuzz-build: runs-on: ubuntu-latest - container: gitea.tap-tap.win/taptap/fastsync-ci:v7 + container: gitea.tap-tap.win/taptap/fastsync-ci:v8 needs: lint steps: - name: Checkout uses: actions/checkout@v4 - - name: Install clang - run: apt-get update -qq && apt-get install -y -qq clang - - name: Configure (clang + fuzz) run: CC=clang CXX=clang++ cmake -B build-fuzz -S . -DENABLE_FUZZ=ON @@ -75,15 +72,12 @@ jobs: coverage: runs-on: ubuntu-latest - container: gitea.tap-tap.win/taptap/fastsync-ci:v7 + container: gitea.tap-tap.win/taptap/fastsync-ci:v8 needs: lint steps: - name: Checkout uses: actions/checkout@v4 - - name: Install lcov - run: apt-get update -qq && apt-get install -y -qq lcov - - name: Configure run: cmake -B build -S . -DENABLE_COVERAGE=ON -DSTRICT_WARNINGS=ON @@ -101,15 +95,12 @@ jobs: valgrind: runs-on: ubuntu-latest - container: gitea.tap-tap.win/taptap/fastsync-ci:v7 + container: gitea.tap-tap.win/taptap/fastsync-ci:v8 needs: lint steps: - name: Checkout uses: actions/checkout@v4 - - name: Install valgrind - run: apt-get update -qq && apt-get install -y -qq valgrind - - name: Configure run: cmake -B build -S . -DSTRICT_WARNINGS=ON diff --git a/Dockerfile b/Dockerfile index b28dd25..c94d26f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,8 @@ FROM ubuntu:24.04 RUN apt-get update && apt-get install -y --no-install-recommends \ gcc g++ make libc6-dev cmake libzstd-dev libssl-dev git ca-certificates curl cppcheck clang-format \ - python3 python3-pip python3-venv openssl openssh-client lcov valgrind && \ + python3 python3-pip python3-venv openssl openssh-client \ + lcov valgrind clang libclang-rt-18-dev && \ pip3 install --break-system-packages pytest && \ curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \ apt-get install -y --no-install-recommends nodejs && \ diff --git a/src/shared/chunk.c b/src/shared/chunk.c index 611f650..0bd0720 100644 --- a/src/shared/chunk.c +++ b/src/shared/chunk.c @@ -120,10 +120,23 @@ Chunk* chunk_deserialize(Data* data, bool use_metadata) { free(path); if (use_metadata) { + if (remaining_size < sizeof(int)) { + log_message(LOG_LEVEL_ERROR, "Invalid chunk format: not enough data for metadata"); + array_list_delete(files); + return NULL; + } file->metadata = metadata_from_buf(&data_pointer); remaining_size -= sizeof(int); - if (file->metadata) + if (file->metadata) { + if (remaining_size < FILE_METADATA_WIRE_SIZE) { + log_message(LOG_LEVEL_ERROR, "Invalid chunk format: not enough data for metadata body"); + free(file->metadata); + file->metadata = NULL; + array_list_delete(files); + return NULL; + } remaining_size -= FILE_METADATA_WIRE_SIZE; + } } if (remaining_size < sizeof(size_t)) {