diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2d8b3c66..58adfa90 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -25,8 +25,6 @@ jobs: rust: beta - os: windows-latest rust: beta - - os: macos-latest - rust: nightly runs-on: ${{ matrix.os }} @@ -35,12 +33,21 @@ jobs: - uses: dtolnay/rust-toolchain@master with: toolchain: ${{ matrix.rust }} + components: ${{ matrix.rust == 'nightly' && 'rust-src' || '' }} # Add toolchain for no_std tests - run: rustup toolchain install nightly - - name: Downgrade idna_adapter on Rust 1.63.0 + - name: Downgrade deps on Rust 1.63.0 if: | matrix.rust == '1.63.0' - run: cargo update -p idna_adapter --precise 1.1.0 + run: | + cargo update -p idna_adapter --precise 1.1.0 + - name: Downgrade deps on Rust 1.67.0 + if: | + matrix.rust == '1.67.0' + run: | + cargo update -p zerofrom --precise 0.1.4 + cargo update -p yoke --precise 0.7.4 + cargo update -p litemap --precise 0.7.3 - name: Add `aarch64-unknown-none` toolchain for `no_std` tests if: | matrix.os == 'ubuntu-latest' && @@ -71,6 +78,32 @@ jobs: run: > cd url && cargo check --target aarch64-unknown-none -v --no-default-features + - name: Run tests with sanitizers + if: (matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest') && matrix.rust == 'nightly' + env: + ASAN_OPTIONS: detect_leaks=1:detect_stack_use_after_return=1 + run: | + if [ "${{ matrix.os }}" = "ubuntu-latest" ]; then + sudo apt-get install -y --no-install-recommends llvm + TARGET="x86_64-unknown-linux-gnu" + SANITIZERS="address thread leak memory" + elif [ "${{ matrix.os }}" = "macos-latest" ]; then + TARGET="aarch64-apple-darwin" + # no memory and leak sanitizer support yet + SANITIZERS="address thread" + # Suppress non-crate leaks on macOS. TODO: Check occasionally if these are still needed. + { + echo "leak:dyld4::RuntimeState" + echo "leak:fetchInitializingClassList" + } > suppressions.txt + export LSAN_OPTIONS="suppressions=$(pwd)/suppressions.txt" + fi + for sanitizer in $SANITIZERS; do + echo "Running tests with $sanitizer sanitizer..." + export RUSTFLAGS="-Z sanitizer=$sanitizer" + export RUSTDOCFLAGS="$RUSTFLAGS" + cargo +nightly test -Z build-std --target "$TARGET" + done WASM: runs-on: ubuntu-latest diff --git a/url/tests/expected_failures.txt b/url/tests/expected_failures.txt index 9bf60b34..238f7a66 100644 --- a/url/tests/expected_failures.txt +++ b/url/tests/expected_failures.txt @@ -41,3 +41,7 @@ set pathname to <\\\\> set pathname to set pathname to + set pathname to + set pathname to + set pathname to + set pathname to