diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 27b31085..cf3628a1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -169,3 +169,34 @@ jobs: lib/binding_web/tree-sitter.wasm if-no-files-found: error retention-days: 7 + + check_undefined_behaviour: + name: Undefined behaviour checks + runs-on: ubuntu-latest + env: + TREE_SITTER: ${{ github.workspace }}/target/release/tree-sitter + steps: + - name: Checkout source code + uses: actions/checkout@v3 + + - name: Install UBSAN library + run: sudo apt-get install -y libubsan1 + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + + - name: Build CLI + run: cargo build --release + + - name: Fetch fixtures + run: script/fetch-fixtures + + - name: Generate fixtures + run: script/generate-fixtures + + - name: Run main tests with undefined behaviour sanitizer (UBSAN) + env: + UBSAN_OPTIONS: halt_on_error=1 + CFLAGS: -fsanitize=undefined + RUSTFLAGS: -lubsan + run: cargo test -- --test-threads 1 diff --git a/cli/src/tests/github_issue_test.rs b/cli/src/tests/github_issue_test.rs new file mode 100644 index 00000000..42fe3e9a --- /dev/null +++ b/cli/src/tests/github_issue_test.rs @@ -0,0 +1,16 @@ +// Tests in this mod need be executed with enabled UBSAN library: +// ``` +// UBSAN_OPTIONS="halt_on_error=1" \ +// CFLAGS="-fsanitize=undefined" \ +// RUSTFLAGS="-lubsan" \ +// cargo test --target $(rustc -vV | sed -nr 's/^host: //p') -- --test-threads 1 +// ``` + +use crate::tests::helpers::fixtures::get_language; +use tree_sitter::Query; + +#[test] +fn issue_2162_out_of_bound() { + let language = get_language("java"); + assert!(Query::new(language, "(package_declaration _ (_) @name _)").is_ok()); +} diff --git a/cli/src/tests/mod.rs b/cli/src/tests/mod.rs index 1b804450..03a588b9 100644 --- a/cli/src/tests/mod.rs +++ b/cli/src/tests/mod.rs @@ -1,4 +1,5 @@ mod corpus_test; +mod github_issue_test; mod helpers; mod highlight_test; mod node_test;