servo / servo/font-kit

Panic when checking file

Open
#250 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
840
Forks
137
Avg merge
4h 56m
Merged PRs (30d)
1

Description

I know that this a duplicate of other issues, but this seems to be first issue with code that produces problem and test file
I didn't want to link to another issue, as it could be overlooked

code

fn check_file(path: &str) {
    let handle = Handle::Path {
        path: PathBuf::from(path),
        font_index: 0
    };
    match MemSource::from_fonts([handle.clone()].into_iter()) {
        Ok(mut source) => {
            let _ = source.all_families();
            let _ = source.select_best_match(&[], &font_kit::properties::Properties::new());
            let _ = source.select_by_postscript_name("");
            let _ = source.as_any();
            let _ = source.add_font(handle);
            let _ = source.all_families();
            let _ = source.select_best_match(&[], &font_kit::properties::Properties::new());
            let _ = source.select_by_postscript_name("");
            let _ = source.as_any();
        },
        Err(e) => {
            eprintln!("Error: {:?}", e);
        }
    }
}

cause this

thread 'main' panicked at /home/runner/.cargo/git/checkouts/font-kit-635e0cfc33286473/f1c992f/src/loaders/freetype.rs:1161:9:
assertion `left == right` failed
  left: 23
 right: 0
stack backtrace:
   0: rust_begin_unwind
             at /rustc/8bfcae730a5db2438bbda72796175bba21427be1/library/std/src/panicking.rs:665:5
   1: core::panicking::panic_fmt
             at /rustc/8bfcae730a5db2438bbda72796175bba21427be1/library/core/src/panicking.rs:74:14
   2: core::panicking::assert_failed_inner
             at /rustc/8bfcae730a5db2438bbda72796175bba21427be1/library/core/src/panicking.rs:410:17
   3: core::panicking::assert_failed
             at /rustc/8bfcae730a5db2438bbda72796175bba21427be1/library/core/src/panicking.rs:365:5
   4: font_kit::loaders::freetype::reset_freetype_face_char_size
             at /home/runner/.cargo/git/checkouts/font-kit-635e0cfc33286473/f1c992f/src/loaders/freetype.rs:1161:9
   5: font_kit::loaders::freetype::setup_freetype_face
             at /home/runner/.cargo/git/checkouts/font-kit-635e0cfc33286473/f1c992f/src/loaders/freetype.rs:1154:5
   6: font_kit::loaders::freetype::Font::from_bytes::{{closure}}
             at /home/runner/.cargo/git/checkouts/font-kit-635e0cfc33286473/f1c992f/src/loaders/freetype.rs:148:13
   7: std::thread::local::LocalKey<T>::try_with
             at /rustc/8bfcae730a5db2438bbda72796175bba21427be1/library/std/src/thread/local.rs:283:12
   8: std::thread::local::LocalKey<T>::with
             at /rustc/8bfcae730a5db2438bbda72796175bba21427be1/library/std/src/thread/local.rs:260:9
   9: font_kit::loaders::freetype::Font::from_bytes
             at /home/runner/.cargo/git/checkouts/font-kit-635e0cfc33286473/f1c992f/src/loaders/freetype.rs:135:26
  10: font_kit::loaders::freetype::Font::from_file
             at /home/runner/.cargo/git/checkouts/font-kit-635e0cfc33286473/f1c992f/src/loaders/freetype.rs:165:9
  11: <font_kit::loaders::freetype::Font as font_kit::loader::Loader>::from_file
             at /home/runner/.cargo/git/checkouts/font-kit-635e0cfc33286473/f1c992f/src/loaders/freetype.rs:1012:9
  12: font_kit::loader::Loader::from_path
             at /home/runner/.cargo/git/checkouts/font-kit-635e0cfc33286473/f1c992f/src/loader.rs:62:9
  13: font_kit::loader::Loader::from_handle
             at /home/runner/.cargo/git/checkouts/font-kit-635e0cfc33286473/f1c992f/src/loader.rs:79:18
  14: font_kit::loaders::freetype::Font::from_handle
             at /home/runner/.cargo/git/checkouts/font-kit-635e0cfc33286473/f1c992f/src/loaders/freetype.rs:208:9
  15: font_kit::sources::mem::add_font
             at /home/runner/.cargo/git/checkouts/font-kit-635e0cfc33286473/f1c992f/src/sources/mem.rs:190:16
  16: font_kit::sources::mem::MemSource::from_fonts
             at /home/runner/.cargo/git/checkouts/font-kit-635e0cfc33286473/f1c992f/src/sources/mem.rs:43:13
  17: font_kit::check_file
             at ./src/crates/font_kit/src/main.rs:32:11
  18: font_kit::main
             at ./src/crates/font_kit/src/main.rs:23:9
  19: core::ops::function::FnOnce::call_once
             at /rustc/8bfcae730a5db2438bbda72796175bba21427be1/library/core/src/ops/function.rs:250:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
timeout: the monitored command dumped core

##### Automatic Fuzzer note, output status "None", output signal "Some(6)"

compressed.zip

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the reproducer in src/crates/font_kit/src/main.rs and the panic locations in loaders/freetype.rs:1154-1161. Trace the call through sources/mem.rs:43 and 190 using compressed.zip, then run the example to confirm the panic. Done means the reported file-check sequence no longer panics and the relevant regression is covered.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
desktop-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.