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 /monkey/..//>
+ set pathname to
+ set pathname to
+ set pathname to /p>
+ set pathname to