From 7fa42014cec28c60e99a804ed7fc170fec5b1b52 Mon Sep 17 00:00:00 2001 From: Vyncint Ng <115854244+vyncint@users.noreply.github.com> Date: Wed, 11 Nov 2026 19:55:44 +0700 Subject: [PATCH 1/3] ci: repin the actions whose tags moved zizmor's online audit failed every pull request since 2026-10-18 with stale-action-refs and ref-version-mismatch on 14 pins: the commits pinned for dtolnay/rust-toolchain `v1` (e2a55d2) and Swatinem/rust-cache `v2` (6323deb) are no longer the commits those tags name. Repinned to what the tags name today, each checked with `gh api repos///git/ref/tags/`: - dtolnay/rust-toolchain v1 683b588c (11 pins) - Swatinem/rust-cache v2 (= v2.9.3) d1527c8f (3 pins) and, in the same pass, the three updates Dependabot has open, also checked against their tags: - actions/upload-artifact v7.0.2 cf430e03 (#70) - taiki-e/install-action v2.87.30 a4d3f3f7 (#77) - rust-lang/crates-io-auth-action v1.0.6 3268eb41 (#78) `zizmor --persona=pedantic .github/workflows/` with a GitHub token (online audits on, as CI runs it): no findings; offline: no findings. Signed-off-by: Vyncint Ng <115854244+vyncint@users.noreply.github.com> --- .github/workflows/ci.yml | 24 ++++++++++++------------ .github/workflows/install.yml | 2 +- .github/workflows/release.yml | 6 +++--- .github/workflows/stress.yml | 6 +++--- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 318e860..3f8368b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,7 +71,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - - uses: dtolnay/rust-toolchain@e2a55d2ffb04f378e9626c28d38b36d230d1e12f # v1 + - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # v1 with: toolchain: stable components: rustfmt @@ -96,7 +96,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - - uses: dtolnay/rust-toolchain@e2a55d2ffb04f378e9626c28d38b36d230d1e12f # v1 + - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # v1 with: toolchain: stable components: clippy @@ -127,14 +127,14 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - - uses: dtolnay/rust-toolchain@e2a55d2ffb04f378e9626c28d38b36d230d1e12f # v1 + - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # v1 with: toolchain: stable - name: Free runner disk space run: | sudo rm -rf /usr/local/lib/android /usr/share/dotnet /opt/ghc \ /usr/local/.ghcup /usr/local/share/powershell 2>/dev/null || true - - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 + - uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0 # v2 if: github.workflow == 'CI' && !inputs.clean with: key: ${{ runner.os }}-${{ runner.arch }}-test-${{ matrix.lane.name }} @@ -170,7 +170,7 @@ jobs: version="$(awk '/^name = "termlens"$/{found=1; next} found && /^version = /{gsub(/[",]/, "", $3); print $3; exit}' Cargo.lock)" [ -n "$version" ] || { echo "::error::no termlens version in Cargo.lock"; exit 1; } echo "version=$version" >> "$GITHUB_OUTPUT" - - uses: taiki-e/install-action@83ac0ad63c0167e6f06796fab0fce28db1bf3db0 # v2.87.22 + - uses: taiki-e/install-action@a4d3f3f761dcd95cce1b72cb61cb6d1963438177 # v2.87.30 if: matrix.lane.name == 'default' with: tool: termlens-cli@${{ steps.termlens.outputs.version }} @@ -199,7 +199,7 @@ jobs: name: termlens-report-linux-${{ matrix.lane.name }} - name: Upload Cargo build timings if: always() - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 with: name: timings-linux-${{ matrix.lane.name }} path: target/cargo-timings/*.html @@ -218,11 +218,11 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - - uses: dtolnay/rust-toolchain@e2a55d2ffb04f378e9626c28d38b36d230d1e12f # v1 + - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # v1 with: toolchain: stable components: clippy - - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 + - uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0 # v2 if: github.workflow == 'CI' && !inputs.clean with: key: ${{ runner.os }}-${{ runner.arch }}-metal @@ -245,7 +245,7 @@ jobs: name: termlens-report-metal - name: Upload Cargo build timings if: always() - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 with: name: timings-metal path: target/cargo-timings/*.html @@ -269,7 +269,7 @@ jobs: msrv="$(sed -n 's/^rust-version *= *"\(.*\)"/\1/p' Cargo.toml)" echo "MSRV: ${msrv}" echo "msrv=${msrv}" >> "$GITHUB_OUTPUT" - - uses: dtolnay/rust-toolchain@e2a55d2ffb04f378e9626c28d38b36d230d1e12f # v1 + - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # v1 with: toolchain: ${{ steps.msrv.outputs.msrv }} - run: cargo check --workspace --all-targets --locked @@ -283,7 +283,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - - uses: dtolnay/rust-toolchain@e2a55d2ffb04f378e9626c28d38b36d230d1e12f # v1 + - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # v1 with: toolchain: stable - run: make doc @@ -317,7 +317,7 @@ jobs: # What crates.io will show for every crate: README, repository, # keywords, categories, docs.rs link. Inherited fields must be opted # into per manifest; 0.1.0 shipped without them. - - uses: dtolnay/rust-toolchain@e2a55d2ffb04f378e9626c28d38b36d230d1e12f # v1 + - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # v1 with: toolchain: stable - run: ./.github/scripts/check-crate-metadata.sh diff --git a/.github/workflows/install.yml b/.github/workflows/install.yml index 6128b09..3838e3f 100644 --- a/.github/workflows/install.yml +++ b/.github/workflows/install.yml @@ -73,7 +73,7 @@ jobs: echo "version=$version" >> "$GITHUB_OUTPUT" echo "msrv=$msrv" >> "$GITHUB_OUTPUT" echo "installing $version (declared MSRV: ${msrv:-none})" - - uses: dtolnay/rust-toolchain@e2a55d2ffb04f378e9626c28d38b36d230d1e12f # v1 + - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # v1 with: # Falls back to stable if the registry reports no rust-version: an # empty toolchain string would otherwise install nothing and fail diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1c4946f..ed94954 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -39,7 +39,7 @@ jobs: with: persist-credentials: false ref: ${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.ref_name }} - - uses: dtolnay/rust-toolchain@e2a55d2ffb04f378e9626c28d38b36d230d1e12f # v1 + - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # v1 with: toolchain: stable - name: Compare the tag against the workspace version @@ -107,7 +107,7 @@ jobs: with: persist-credentials: false ref: ${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.ref_name }} - - uses: dtolnay/rust-toolchain@e2a55d2ffb04f378e9626c28d38b36d230d1e12f # v1 + - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # v1 with: toolchain: stable - name: Verify the tree the tag points at @@ -120,7 +120,7 @@ jobs: # answers the exchange with 400 "No Trusted Publishing config found" — # that is expected on the first release, so the step may fail and the # publish loop falls back to the registry token below. - - uses: rust-lang/crates-io-auth-action@c6f97d42243bad5fab37ca0427f495c86d5b1a18 # v1.0.5 + - uses: rust-lang/crates-io-auth-action@3268eb413133e2960fa4ae0e963ca76380c54cd9 # v1.0.6 id: auth continue-on-error: true - name: Publish every crate, in dependency order diff --git a/.github/workflows/stress.yml b/.github/workflows/stress.yml index 4d961ea..266e672 100644 --- a/.github/workflows/stress.yml +++ b/.github/workflows/stress.yml @@ -32,10 +32,10 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - - uses: dtolnay/rust-toolchain@e2a55d2ffb04f378e9626c28d38b36d230d1e12f # v1 + - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # v1 with: toolchain: stable - - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 + - uses: Swatinem/rust-cache@d1527c8f67ef9af357290475d4af4b0fab8f12e0 # v2 with: key: ${{ runner.os }}-${{ runner.arch }}-stress-release cache-bin: false @@ -55,7 +55,7 @@ jobs: name: termlens-report-stress-${{ matrix.os }} - name: Upload Cargo build timings if: always() - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 with: name: timings-stress-${{ matrix.os }} path: target/cargo-timings/*.html From 5941ef879f39239c6afc1e08c728b8ad03af47df Mon Sep 17 00:00:00 2001 From: Vyncint Ng <115854244+vyncint@users.noreply.github.com> Date: Wed, 11 Nov 2026 19:55:44 +0700 Subject: [PATCH 2/3] fix(deps): update the crates RustSec flags inside the current chain `cargo deny check` failed on 15 advisories. All but one have a fix inside the version ranges the Ballista 54 chain allows, so the lock moves only those crates: - rustls 0.23.45 -> 0.23.46: RUSTSEC-2026-0346 (Debug exposes TLS secrets), -0347, -0348 (Brotli certificate decompression up to 1 GiB before authentication), -0349 - rustls-webpki 0.103.15 -> 0.103.16: RUSTSEC-2026-0382 - tokio 1.53.1 -> 1.54.1: RUSTSEC-2026-0386 (AsyncFd I/O safety) - zstd 0.13.3 -> 0.13.4, zstd-safe 7.2.4 -> 7.4.0, zstd-sys 2.0.16 -> 2.1.2: RUSTSEC-2026-0391, -0398, -0403, -0410. zstd 0.13.4 is the patched 0.13 line, so DataFusion's `zstd ^0.13` no longer holds it back - ctutils 0.4.2 -> 0.4.8: RUSTSEC-2026-0385 - pulldown-cmark 0.13.4 -> 0.13.6 (a build dependency of tonic's prost-build): RUSTSEC-2026-0414, -0433 - the aws-smithy/aws-config family (Ballista's bundled AWS SDK) within semver, which drops pin-utils (RUSTSEC-2026-0441, unmaintained, no fixed release): aws-smithy-http 0.64.3 no longer depends on it and Dependabot's open group (#81) where it applies: insta 1.49.0, libc 0.2.191, objc2 0.6.5, serde_json 1.0.154, plus rustls (#82). The one that cannot move here is thrift (RUSTSEC-2026-0435, which RustSec imported on 2026-11-02 for CVE-2026-43868): parquet 58 requires thrift ^0.17, and the fix is parquet 59, which drops thrift and needs the Ballista 55 chain (#40). RustSec scopes the advisory to TBinaryInputProtocol::read_bytes/read_string; parquet 58 decodes footers with its own compact-protocol reader (parquet/src/thrift.rs) and never constructs the binary protocol. deny.toml accepts the RustSec id with that reason beside the existing GHSA entry, and SECURITY.md names it; both go with the chain bump (#54). Verified: `cargo deny check` passes (the two warnings are the GHSA entry RustSec does not know by that id, as #54 describes); `make msrv` (1.94.1, --locked), `make lint` and `make test` (163 passed, 0 failed) pass. Signed-off-by: Vyncint Ng <115854244+vyncint@users.noreply.github.com> --- Cargo.lock | 259 ++++++++++++++++++++++------------------------------ SECURITY.md | 18 ++-- deny.toml | 8 ++ 3 files changed, 128 insertions(+), 157 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 55f33cb..c12acc9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -481,9 +481,9 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-config" -version = "1.11.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a767267da9e2c2e189b2f9df8b5657e850ecf5352644734ba130d4a57095cf1b" +checksum = "16ec023cac0d0c0432e606a2d14f04eb70d09c71a739a406141e7be6b923ab95" dependencies = [ "aws-credential-types", "aws-runtime", @@ -501,7 +501,7 @@ dependencies = [ "bytes", "fastrand", "hex", - "http 1.5.0", + "http", "sha1", "time", "tokio", @@ -512,9 +512,9 @@ dependencies = [ [[package]] name = "aws-credential-types" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e93964ffdaf57857f544be3666a5f57570bb699e934700f11b49708f61bb556e" +checksum = "576e8da35751dc85409ec1cd15999f692c277a1fbe9336780fe6f15e49dd637d" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", @@ -547,9 +547,9 @@ dependencies = [ [[package]] name = "aws-runtime" -version = "1.9.1" +version = "1.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9007227e10b5fed2f3e0a2beff489211e2b5604c400b7a9d5d81ca9d64c24bb" +checksum = "de8930c11353c72ae54aa24dc94d692df74d59814839cbaf8069d63dbcb4c519" dependencies = [ "aws-credential-types", "aws-sigv4", @@ -562,8 +562,8 @@ dependencies = [ "bytes", "bytes-utils", "fastrand", - "http 1.5.0", - "http-body 1.1.0", + "http", + "http-body", "percent-encoding", "pin-project-lite", "tracing", @@ -572,9 +572,9 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "1.108.0" +version = "1.121.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c15301b04372832947916607983b114b3374b9db0be058a00fb7513800de1f05" +checksum = "d8d414ba8f00c2b4b506893ded67827e63be88b5e6cce71b7c0ac8f96ce09bc5" dependencies = [ "arc-swap", "aws-credential-types", @@ -590,17 +590,16 @@ dependencies = [ "aws-types", "bytes", "fastrand", - "http 0.2.12", - "http 1.5.0", + "http", "regex-lite", "tracing", ] [[package]] name = "aws-sdk-ssooidc" -version = "1.110.0" +version = "1.123.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72cc2c205cb27108183cf1856333f7d584c2ba0f505421b4209ca5828f9ea899" +checksum = "db26187b124bcc637641f7963d5200c5ec2409ea5b7730dd7e014ef4e0ab6f19" dependencies = [ "arc-swap", "aws-credential-types", @@ -614,19 +613,16 @@ dependencies = [ "aws-smithy-schema", "aws-smithy-types", "aws-types", - "bytes", "fastrand", - "http 0.2.12", - "http 1.5.0", "regex-lite", "tracing", ] [[package]] name = "aws-sdk-sts" -version = "1.113.0" +version = "1.126.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68182ecb449f7537db0f4d5d25917789cf41e32074a9fe47b6a0b847fe1d2032" +checksum = "c667da7839295125cfe23280f798c07ba694a9fed191af804edb4bda09ac7f10" dependencies = [ "arc-swap", "aws-credential-types", @@ -643,17 +639,16 @@ dependencies = [ "aws-smithy-xml", "aws-types", "fastrand", - "http 0.2.12", - "http 1.5.0", + "http", "regex-lite", "tracing", ] [[package]] name = "aws-sigv4" -version = "1.5.1" +version = "1.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "723c2234ad7511ceef63eab016b7ba6ff7c55590fefb96fa8467af014a07309f" +checksum = "57a4393e6addc3380632887b0998d06ad5f099ab5c478be0a3eeedecf8604161" dependencies = [ "aws-credential-types", "aws-smithy-http", @@ -663,8 +658,7 @@ dependencies = [ "form_urlencoded", "hex", "hmac", - "http 0.2.12", - "http 1.5.0", + "http", "percent-encoding", "sha2 0.11.0", "time", @@ -673,9 +667,9 @@ dependencies = [ [[package]] name = "aws-smithy-async" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02e407fb3b54891734224b9ffac8a71fdd35f542500fa1af95754a6b2beb316" +checksum = "de681a9df7ff79823b759ee17061076ec049cd61a8fa28ece4293d89c9f6964e" dependencies = [ "futures-util", "pin-project-lite", @@ -684,9 +678,9 @@ dependencies = [ [[package]] name = "aws-smithy-http" -version = "0.64.0" +version = "0.64.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37843d9add67c3aff5856f409c6dc315d3cdff60f9c0cb5b670dab1e9920306d" +checksum = "19af609dd5edf8b056cd0bb001c706c8b3b1458055328b334ec13d7f46f6aaa8" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", @@ -694,26 +688,25 @@ dependencies = [ "bytes-utils", "futures-core", "futures-util", - "http 1.5.0", - "http-body 1.1.0", + "http", + "http-body", "http-body-util", "percent-encoding", "pin-project-lite", - "pin-utils", "tracing", ] [[package]] name = "aws-smithy-http-client" -version = "1.4.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebfd138fac0337cee7516c352757ea73b9f2266e57d0bcb5bc70e9547e45aef1" +checksum = "859a81364f8185349c584fb41cd8765a400cf982f447adada590cf008a9f3b85" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", "aws-smithy-types", "h2", - "http 1.5.0", + "http", "hyper", "hyper-rustls", "hyper-util", @@ -729,9 +722,9 @@ dependencies = [ [[package]] name = "aws-smithy-json" -version = "0.63.0" +version = "0.65.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dc65a121adb4b33729919fcfa14fa36fb33c1555a8f06bb0e2188dbfdc1d9ef" +checksum = "b45f9fc77ffe92c92c341165a01a565bd30c39ecf5aa8c0719b41719009604f9" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-schema", @@ -740,18 +733,20 @@ dependencies = [ [[package]] name = "aws-smithy-observability" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e86338c869539a581bf161247762a6e87f92c5c075060057b5ed6d06632ed0c" +checksum = "a416257d7b1b0f32a517a470a8c1dd354d8c4aa697ccab81a11a1e6cfb7418e3" dependencies = [ "aws-smithy-runtime-api", + "aws-smithy-types", + "tracing", ] [[package]] name = "aws-smithy-query" -version = "0.62.0" +version = "0.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512346c7212ab7436df2d77a16d976a468ae44a418835511d2a69269810aaf62" +checksum = "165f6265342a313ad6f7a1ac17a0cdba30c522039d3f41d8d6871ce8a2b34ecd" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-schema", @@ -762,9 +757,9 @@ dependencies = [ [[package]] name = "aws-smithy-runtime" -version = "1.14.0" +version = "1.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b82e438d30e02a825d363bd639a9efaed68a8089d86101054b0081e7e0d3e606" +checksum = "5bc688673e282f42d3152dcd9cacc1a9a75734d7cd39d02e58989276fc750f3c" dependencies = [ "aws-smithy-async", "aws-smithy-http", @@ -775,29 +770,25 @@ dependencies = [ "aws-smithy-types", "bytes", "fastrand", - "http 0.2.12", - "http 1.5.0", - "http-body 0.4.6", - "http-body 1.1.0", + "http", + "http-body", "http-body-util", "pin-project-lite", - "pin-utils", "tokio", "tracing", ] [[package]] name = "aws-smithy-runtime-api" -version = "1.15.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "954c563ce84507722d2679f07a35d21b9c6466b3872d513020d0281fc8112ac9" +checksum = "0467a2414e84b1b01e37452896fb3562b93926e81c619eba6ecf27ce9e682a0e" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api-macros", "aws-smithy-types", "bytes", - "http 0.2.12", - "http 1.5.0", + "http", "pin-project-lite", "tokio", "tracing", @@ -806,9 +797,9 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api-macros" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "221eaa237ddf1ca79b60d1372aad77e47f9c0ea5b3ce5099da8c61d027dc77b3" +checksum = "ce237f890a2283c9b328955c3b0918d2d5bf66a1cb6ceccd36a0047246fbc6e6" dependencies = [ "proc-macro2", "quote", @@ -817,33 +808,29 @@ dependencies = [ [[package]] name = "aws-smithy-schema" -version = "0.2.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d56e0a4e53127a632224e43633b0fe045fa9e1e3cfc68b9830f1115e103f910" +checksum = "f7ef30d39e131651359b60a1c560de9a9502a4c3754172ab2d6e8734fe21bcba" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", - "http 1.5.0", + "http", ] [[package]] name = "aws-smithy-types" -version = "1.6.2" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fce83ce9abbb198d25bc7131e468d0f9fe1257125e58c39f3f9fc9f5098c9647" +checksum = "aff4bf014c512840b2bba80a20417b723cbd6a0a65c02e2d81f50b4268aedfc7" dependencies = [ "base64-simd", "bytes", "bytes-utils", - "http 0.2.12", - "http 1.5.0", - "http-body 0.4.6", - "http-body 1.1.0", + "http", + "http-body", "http-body-util", "itoa", - "num-integer", "pin-project-lite", - "pin-utils", "ryu", "serde", "time", @@ -851,9 +838,9 @@ dependencies = [ [[package]] name = "aws-smithy-xml" -version = "0.62.0" +version = "0.64.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce84f71c72fee2cbbadde6e7d082f5fb466e3a84733855295fa7aafd1b31b7d8" +checksum = "590fdc1a70546b2f7f2061c42eaf173fb6f26d935330d069edc04dbd8f01d924" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-schema", @@ -863,9 +850,9 @@ dependencies = [ [[package]] name = "aws-types" -version = "1.5.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eec1cd5469f328c782dc3e33d4153cf118a54e33cbb3356d60d16f89883e1f94" +checksum = "6ba0d970d3947bb064d2ae1d823efa186c1dbde88f88afa8f6549946e5d8deee" dependencies = [ "aws-credential-types", "aws-smithy-async", @@ -886,8 +873,8 @@ dependencies = [ "bytes", "form_urlencoded", "futures-util", - "http 1.5.0", - "http-body 1.1.0", + "http", + "http-body", "http-body-util", "hyper", "hyper-util", @@ -917,8 +904,8 @@ checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" dependencies = [ "bytes", "futures-core", - "http 1.5.0", - "http-body 1.1.0", + "http", + "http-body", "http-body-util", "mime", "pin-project-lite", @@ -1030,7 +1017,7 @@ dependencies = [ "datafusion", "datafusion-proto", "futures", - "http 1.5.0", + "http", "insta", "itertools 0.15.0", "log", @@ -1666,9 +1653,9 @@ dependencies = [ [[package]] name = "ctutils" -version = "0.4.2" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +checksum = "261af4dc7a06ea8a527a8717d8cbba3417530d6ea14e1edb3de6b67806be474f" dependencies = [ "cmov", ] @@ -2567,7 +2554,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -2865,7 +2852,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http 1.5.0", + "http", "indexmap", "slab", "tokio", @@ -2968,17 +2955,6 @@ dependencies = [ "digest 0.11.3", ] -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - [[package]] name = "http" version = "1.5.0" @@ -2989,17 +2965,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", -] - [[package]] name = "http-body" version = "1.1.0" @@ -3007,7 +2972,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" dependencies = [ "bytes", - "http 1.5.0", + "http", ] [[package]] @@ -3018,8 +2983,8 @@ checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c" dependencies = [ "bytes", "futures-core", - "http 1.5.0", - "http-body 1.1.0", + "http", + "http-body", "pin-project-lite", ] @@ -3061,8 +3026,8 @@ dependencies = [ "futures-channel", "futures-core", "h2", - "http 1.5.0", - "http-body 1.1.0", + "http", + "http-body", "httparse", "httpdate", "itoa", @@ -3078,7 +3043,7 @@ version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ - "http 1.5.0", + "http", "hyper", "hyper-util", "rustls", @@ -3111,8 +3076,8 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.5.0", - "http-body 1.1.0", + "http", + "http-body", "hyper", "ipnet", "libc", @@ -3279,9 +3244,9 @@ dependencies = [ [[package]] name = "insta" -version = "1.48.0" +version = "1.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f0f8fee8c926415c58d6ae43a08523a26faccb2323f5e6b644fe7dd4ef6b82" +checksum = "b67d3d2e287e4b86c10b3f3b641033d1f89b74bdb39d05f34952e2b9a6fe21cd" dependencies = [ "console", "once_cell", @@ -3465,9 +3430,9 @@ checksum = "34b357333733e8260735ba5894eb928c02ecc69c78715f01a8019e7fa7f2db4c" [[package]] name = "libc" -version = "0.2.189" +version = "0.2.191" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" +checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a" [[package]] name = "libloading" @@ -3857,9 +3822,9 @@ dependencies = [ [[package]] name = "objc2" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +checksum = "08849bbd4767dfae9457696856ae1c84fe4e0281bbe4a7abff2d0e06fb7981f8" dependencies = [ "objc2-encode", ] @@ -3941,7 +3906,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "http 1.5.0", + "http", "http-body-util", "humantime", "hyper", @@ -4525,12 +4490,6 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - [[package]] name = "pkg-config" version = "0.3.34" @@ -4712,9 +4671,9 @@ dependencies = [ [[package]] name = "pulldown-cmark" -version = "0.13.4" +version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e" +checksum = "3db2be46835f013dd3f4fa7f5f7402c537787b54ebb6fe2b94bbdd7e2669bb7b" dependencies = [ "bitflags 2.13.1", "memchr", @@ -4793,7 +4752,7 @@ dependencies = [ "once_cell", "socket2", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -5093,8 +5052,8 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http 1.5.0", - "http-body 1.1.0", + "http", + "http-body", "http-body-util", "hyper", "hyper-rustls", @@ -5163,14 +5122,14 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.45" +version = "0.23.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634" +checksum = "48e13bd8c0e9365c43cfa5c9e8f9ad49d3c8444926c9aac819e0e4dc503c8fdf" dependencies = [ "aws-lc-rs", "once_cell", @@ -5205,9 +5164,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.15" +version = "0.103.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" +checksum = "4443b1b6d39d7c663139942cc4558262562d2c84123bb6282ef177009ca8b281" dependencies = [ "aws-lc-rs", "ring", @@ -5341,9 +5300,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.151" +version = "1.0.154" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6" dependencies = [ "itoa", "memchr", @@ -5702,10 +5661,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.4", + "getrandom 0.4.3", "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -5935,9 +5894,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.53.1" +version = "1.54.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +checksum = "b52fd3255258d26fac7264ab5a76b53c13367136dc011d3d6ad4f8ed070396a3" dependencies = [ "bytes", "libc", @@ -6008,8 +5967,8 @@ dependencies = [ "base64", "bytes", "h2", - "http 1.5.0", - "http-body 1.1.0", + "http", + "http-body", "http-body-util", "hyper", "hyper-timeout", @@ -6093,8 +6052,8 @@ dependencies = [ "bitflags 2.13.1", "bytes", "futures-util", - "http 1.5.0", - "http-body 1.1.0", + "http", + "http-body", "pin-project-lite", "tower", "tower-layer", @@ -6110,7 +6069,7 @@ checksum = "b11f75e912b0c2be01b63d8cf8057b8c3f97cf34abb3d431a3a4c8675498e233" dependencies = [ "bitflags 2.13.1", "bytes", - "http 1.5.0", + "http", "percent-encoding", "pin-project-lite", "tower-layer", @@ -6593,7 +6552,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -6938,27 +6897,27 @@ checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" [[package]] name = "zstd" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +checksum = "cdb02c3132d251ab1606e9fc913a7da6c6ed08cc263df15edf082e1dc497d157" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "7.2.4" +version = "7.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +checksum = "1c8ea04668f5de8d8d51051714ba560c9536519cadcdb8829bba4fe2ad159b03" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.16+zstd.1.5.7" +version = "2.1.2+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +checksum = "481ada9c543b2323cbb7bbdbb5249177fbf0188ed959ed2c15e4b22421c84ed3" dependencies = [ "cc", "pkg-config", diff --git a/SECURITY.md b/SECURITY.md index 818f9f4..88478da 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -60,13 +60,17 @@ re-examined at every chain bump. None is silent: they are listed here, in `deny.toml`, and in `STATUS.md`. - **thrift < 0.23.0 — excessive allocation from a size field during decode** - (CVE-2026-43868, GHSA-2f9f-gq7v-9h6m, medium). Reached through `parquet 58 → - thrift ^0.17`. The fix is not a thrift bump: `parquet 59` removed the thrift - dependency altogether, but it needs DataFusion 55, and the newest Ballista - (54.1.0) still requires DataFusion ^54. **Exposure is decoding the footer of - a Parquet file** — so until the chain bump lands, do not point this engine at - Parquet produced by a party you do not trust; the trust model above already - scopes input files to infrastructure you control. Tracked in issue #4. + (CVE-2026-43868, GHSA-2f9f-gq7v-9h6m, RUSTSEC-2026-0435, medium). Reached + through `parquet 58 → thrift ^0.17`. The fix is not a thrift bump: + `parquet 59` removed the thrift dependency altogether, and it needs + DataFusion 55, which Ballista reached in 55.0.0 (2026-10-06); that chain + bump is #40. RustSec names only the binary protocol's `read_bytes` and + `read_string`, which parquet's own compact-protocol footer reader never + calls, but the GitHub advisory is broader, so the conservative reading + stands: **exposure is decoding the footer of a Parquet file** — until the + chain bump lands, do not point this engine at Parquet produced by a party + you do not trust; the trust model above already scopes input files to + infrastructure you control. Tracked in issue #4. - **quick-xml** (RUSTSEC-2026-0194/0195) — reached only by `object_store`'s cloud backends, which OxideLake never registers. - **paste** (RUSTSEC-2024-0436) — a compile-time proc-macro dependency of diff --git a/deny.toml b/deny.toml index a847348..20565f2 100644 --- a/deny.toml +++ b/deny.toml @@ -35,6 +35,14 @@ ignore = [ # down rather than going red on every PR the day RustSec catches up. # Re-examine at every chain bump; remove when parquet >= 59 is in the lock. { id = "GHSA-2f9f-gq7v-9h6m", reason = "thrift 0.17 via parquet 58; fix is parquet 59 (drops thrift), blocked on Ballista > 54; exposure is Parquet footer decode of trusted files" }, + # RustSec imported the same CVE on 2026-11-02 as RUSTSEC-2026-0435 and names + # the functions it affects: `TBinaryInputProtocol::read_bytes` and + # `read_string`. parquet 58 reads footers with its own compact-protocol + # reader (parquet/src/thrift.rs) and never constructs the binary protocol, + # so those functions are not reached; the GHSA entry above stays the + # conservative record. Both go together when parquet >= 59 is in the lock + # (#40, #54). + { id = "RUSTSEC-2026-0435", reason = "thrift 0.17 via parquet 58; RustSec scopes it to TBinaryInputProtocol, which parquet never uses; removed by the parquet 59 chain bump" }, # quick-xml is reached only through object_store's S3 / Azure / GCS # backends. OxideLake registers the local filesystem store exclusively # (oxidelake_storage::store), so the vulnerable XML parser is never invoked. From 8e06baa7028d699aa0e0e7eea2c6a210ccbca181 Mon Sep 17 00:00:00 2001 From: Vyncint Ng <115854244+vyncint@users.noreply.github.com> Date: Wed, 11 Nov 2026 19:58:59 +0700 Subject: [PATCH 3/3] docs(changelog): record the security updates The lockfile update in the previous commit is what the release binaries and `cargo install --locked` build from, so it ships to users and gets a Security entry under [Unreleased]. Signed-off-by: Vyncint Ng <115854244+vyncint@users.noreply.github.com> --- CHANGELOG.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 49b6609..0bdf1bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,21 @@ versions (0.x) may contain breaking changes; they are always listed under a ## [Unreleased] +### Security + +- **Vulnerable crates in the locked graph updated** (the lockfile is what + `cargo install --locked` and the release binaries build from): rustls + 0.23.46 (RUSTSEC-2026-0346 to -0349: TLS secrets in `Debug` output, up to + 1 GiB allocated by Brotli certificate decompression before + authentication, an ECH data leak and a key-exchange downgrade), + rustls-webpki 0.103.16 (RUSTSEC-2026-0382), tokio 1.54.1 + (RUSTSEC-2026-0386), the patched zstd 0.13.4 / zstd-safe 7.4 / zstd-sys + 2.1.2 line (RUSTSEC-2026-0391, -0398, -0403, -0410), ctutils 0.4.8 + (RUSTSEC-2026-0385), pulldown-cmark 0.13.6 (a build dependency; + RUSTSEC-2026-0414, -0433), and the AWS SDK crates Ballista bundles, whose + current releases no longer pull the unmaintained `pin-utils` + (RUSTSEC-2026-0441). + ## [0.2.0] - 2026-09-21 The observability release. A GPU deployment that silently ran everything on