diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f1a2b16ec..24469d70e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,7 +49,7 @@ jobs: - uses: Swatinem/rust-cache@v2 - run: cargo check --workspace --examples --tests --release - run: cargo clean - test: + test-ubuntu: runs-on: ubuntu-latest needs: [check] env: @@ -68,6 +68,48 @@ jobs: - uses: Swatinem/rust-cache@v2 - run: cargo do test --nextest - run: cargo clean + test-windows: + runs-on: windows-latest + needs: [check] + env: + ZNG_TP_LICENSES: true + NEXTEST_RETRIES: 3 + CC: 'clang-cl' + CXX: 'clang-cl' + steps: + - uses: dtolnay/rust-toolchain@stable + - name: install cargo-about + uses: baptiste0928/cargo-install@v3 + with: + crate: cargo-about + - name: install cargo-nextest + uses: taiki-e/install-action@v2 + with: + tool: cargo-nextest + - uses: actions/checkout@v4 + - uses: Swatinem/rust-cache@v2 + - run: cargo do test --nextest + - run: cargo clean + test-macos: + runs-on: macos-latest + needs: [check] + env: + ZNG_TP_LICENSES: true + NEXTEST_RETRIES: 3 + steps: + - uses: dtolnay/rust-toolchain@stable + - name: install cargo-about + uses: baptiste0928/cargo-install@v3 + with: + crate: cargo-about + - name: install cargo-nextest + uses: taiki-e/install-action@v2 + with: + tool: cargo-nextest + - uses: actions/checkout@v4 + - uses: Swatinem/rust-cache@v2 + - run: cargo do test --nextest + - run: cargo clean test-doc: runs-on: ubuntu-latest needs: [check] @@ -90,6 +132,6 @@ jobs: - run: cargo clean test-all: runs-on: ubuntu-latest - needs: [check-release, doc, test, test-doc, test-macro] + needs: [check-release, doc, test-ubuntu, test-windows, test-macos, test-doc, test-macro] steps: - run: exit 0 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 02d2f49db..d6a3e29a8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -78,7 +78,7 @@ jobs: - run: cargo clean if: ${{ github.event.inputs.skip_checks != 'true' }} check-macos: - runs-on: macos-13 + runs-on: macos-latest steps: - uses: actions/checkout@v4 if: ${{ github.event.inputs.skip_checks != 'true' }} @@ -225,7 +225,7 @@ jobs: name: prebuilt-windows path: crates/zng-view-prebuilt/lib/zng_view.dll prebuild-macos: - runs-on: macos-13 + runs-on: macos-latest needs: [check-macos] env: ZNG_TP_LICENSES: true @@ -392,7 +392,7 @@ jobs: - run: cargo clean if: ${{ github.event.inputs.skip_tests != 'true' }} test-macos: - runs-on: macos-13 + runs-on: macos-latest needs: [prebuild-macos] env: NEXTEST_RETRIES: 3 diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fbf93c3b..067193309 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ * Fix `Img::copy_pixels`. * Fix `view_process::default::run_same_process` exit in headless runs. * Fix `AutoGrowMode::rows` actually enabling Columns auto grow. +* Fix "unsafe precondition(s) violated" issue ([#242](https://github.com/zng-ui/zng/issues/242)). # 0.6.1 diff --git a/crates/zng-ext-font/src/lib.rs b/crates/zng-ext-font/src/lib.rs index 03f7d6d22..6be454a5d 100644 --- a/crates/zng-ext-font/src/lib.rs +++ b/crates/zng-ext-font/src/lib.rs @@ -1019,7 +1019,7 @@ impl FontFace { } else { ColorGlyphs::load(&font)? }; - let has_ligatures = face.table_with_tag(b"GSUB").is_some(); + let has_ligatures = font.load_font_table(GSUB).is_some(); let lig_carets = if has_ligatures { LigatureCaretList::empty() } else { @@ -1094,7 +1094,8 @@ impl FontFace { } else { ColorGlyphs::load(&font)? }; - let has_ligatures = face.table_with_tag(b"GSUB").is_some(); + + let has_ligatures = font.load_font_table(GSUB).is_some(); let lig_carets = if has_ligatures { LigatureCaretList::empty() } else { diff --git a/crates/zng-ext-font/src/ligature_util.rs b/crates/zng-ext-font/src/ligature_util.rs index 276e3a7a9..dae2df498 100644 --- a/crates/zng-ext-font/src/ligature_util.rs +++ b/crates/zng-ext-font/src/ligature_util.rs @@ -12,6 +12,7 @@ use core::cmp; use byteorder::{BigEndian, ReadBytesExt}; use zng_view_api::font::GlyphIndex; +pub const GSUB: u32 = u32::from_be_bytes(*b"GSUB"); const GDEF: u32 = u32::from_be_bytes(*b"GDEF"); #[derive(Clone)]