Skip to content

Panic: Non-antialiased, hairline stroke, full width rectangle #100

@kosayoda

Description

@kosayoda

Hi! I'm getting a panic similar to #20 and #47 with the following code on the latest master:

use tiny_skia::*;

fn main() {
    let mut pixmap = Pixmap::new(100, 100).unwrap();

    let mut path_builder = PathBuilder::new();

    let rect = Rect::from_xywh(0.0, 0.0, 100.0, 100.0).unwrap();
    path_builder.push_rect(rect);

    let path = path_builder.finish().unwrap();

    let mut paint = Paint::default();
    paint.anti_alias = false;

    let mut stroke = Stroke::default();
    stroke.width = 0.0;

    pixmap.stroke_path(&path, &paint, &stroke, Transform::identity(), None);
}

Panic backtrace:

thread 'main' panicked at 'range end index 10001 out of range for slice of length 10000', /home/kosa/.local/share/cargo/git/checkouts/tiny-skia-ff2529ae49675170/d2b7abb/src/pipeline/blitter.rs:325:21
stack backtrace:
   0:     0x5630a5a586c1 - std::backtrace_rs::backtrace::libunwind::trace::h5554868a335b687a
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x5630a5a586c1 - std::backtrace_rs::backtrace::trace_unsynchronized::hfd24c2b1bc872c7f
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x5630a5a586c1 - std::sys_common::backtrace::_print_fmt::hb40d4835c8544bc2
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/sys_common/backtrace.rs:65:5
   3:     0x5630a5a586c1 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h3d8750c5a9a530aa
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x5630a5a7439f - core::fmt::rt::Argument::fmt::h4d7415a32daf52e6
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/core/src/fmt/rt.rs:138:9
   5:     0x5630a5a7439f - core::fmt::write::h15119af0af627cb4
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/core/src/fmt/mod.rs:1094:21
   6:     0x5630a5a56787 - std::io::Write::write_fmt::hc629dbaef083aeea
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/io/mod.rs:1714:15
   7:     0x5630a5a584d5 - std::sys_common::backtrace::_print::he9d2145ade770793
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/sys_common/backtrace.rs:47:5
   8:     0x5630a5a584d5 - std::sys_common::backtrace::print::h026f51a088c21258
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/sys_common/backtrace.rs:34:9
   9:     0x5630a5a598b3 - std::panicking::default_hook::{{closure}}::h34f469ea2c03adc7
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/panicking.rs:269:22
  10:     0x5630a5a59644 - std::panicking::default_hook::hfd3e1ef4c97a68b4
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/panicking.rs:288:9
  11:     0x5630a5a59e39 - std::panicking::rust_panic_with_hook::hc3be44b7757db76f
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/panicking.rs:705:13
  12:     0x5630a5a59d37 - std::panicking::begin_panic_handler::{{closure}}::ha8f95c8316903adf
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/panicking.rs:597:13
  13:     0x5630a5a58af6 - std::sys_common::backtrace::__rust_end_short_backtrace::h50cf4d5ceed3b7ca
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/sys_common/backtrace.rs:151:18
  14:     0x5630a5a59a82 - rust_begin_unwind
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/panicking.rs:593:5
  15:     0x5630a595eea3 - core::panicking::panic_fmt::hb952c057152cc209
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/core/src/panicking.rs:67:14
  16:     0x5630a595f472 - core::slice::index::slice_end_index_len_fail_rt::h11d36dbe3c608f5c
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/core/src/slice/index.rs:76:5
  17:     0x5630a595f472 - core::slice::index::slice_end_index_len_fail::hd44b49b92f227a9f
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/core/src/slice/index.rs:68:9
  18:     0x5630a598d95f - <core::ops::range::Range<usize> as core::slice::index::SliceIndex<[T]>>::index_mut::h9535f765aa202fac
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/core/src/slice/index.rs:419:13
  19:     0x5630a5a11deb - core::slice::index::<impl core::ops::index::IndexMut<I> for [T]>::index_mut::h40da4673d4351703
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/core/src/slice/index.rs:29:9
  20:     0x5630a59693ff - <tiny_skia::pipeline::blitter::RasterPipelineBlitter as tiny_skia::blitter::Blitter>::blit_rect::h10aa2c5f5a8a1145
                               at /home/kosa/.local/share/cargo/git/checkouts/tiny-skia-ff2529ae49675170/d2b7abb/src/pipeline/blitter.rs:325:21
  21:     0x5630a59689ca - <tiny_skia::pipeline::blitter::RasterPipelineBlitter as tiny_skia::blitter::Blitter>::blit_h::h900ce4906ed2fae0
                               at /home/kosa/.local/share/cargo/git/checkouts/tiny-skia-ff2529ae49675170/d2b7abb/src/pipeline/blitter.rs:233:9
  22:     0x5630a5a0a810 - tiny_skia::scan::hairline::hair_line_rgn::hb4d2b97ebae2968c
                               at /home/kosa/.local/share/cargo/git/checkouts/tiny-skia-ff2529ae49675170/d2b7abb/src/scan/hairline.rs:141:21
  23:     0x5630a5a0b33f - tiny_skia::scan::hairline::stroke_path_impl::h636291936c1eb32f
                               at /home/kosa/.local/share/cargo/git/checkouts/tiny-skia-ff2529ae49675170/d2b7abb/src/scan/hairline.rs:224:17
  24:     0x5630a5a0a063 - tiny_skia::scan::hairline::stroke_path::h7a059ef1df4ac2e3
                               at /home/kosa/.local/share/cargo/git/checkouts/tiny-skia-ff2529ae49675170/d2b7abb/src/scan/hairline.rs:36:5
  25:     0x5630a598d5a2 - tiny_skia::painter::<impl tiny_skia::pixmap::PixmapMut>::stroke_hairline::h346e8764c597db6b
                               at /home/kosa/.local/share/cargo/git/checkouts/tiny-skia-ff2529ae49675170/d2b7abb/src/painter.rs:462:13
  26:     0x5630a598cdf6 - tiny_skia::painter::<impl tiny_skia::pixmap::PixmapMut>::stroke_path::h9ffd16c046aac18a
                               at /home/kosa/.local/share/cargo/git/checkouts/tiny-skia-ff2529ae49675170/d2b7abb/src/painter.rs:430:21
  27:     0x5630a598ad70 - tiny_skia::painter::<impl tiny_skia::pixmap::Pixmap>::stroke_path::h09e80b5072064ede
                               at /home/kosa/.local/share/cargo/git/checkouts/tiny-skia-ff2529ae49675170/d2b7abb/src/painter.rs:143:9
  28:     0x5630a595fa1f - testing::main::hd5feaac4d9e7398b
                               at /home/kosa/Documents/code/rust/testing/src/main.rs:19:5
  29:     0x5630a595fb2b - core::ops::function::FnOnce::call_once::hdab0e40803267661
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/core/src/ops/function.rs:250:5
  30:     0x5630a595fbae - std::sys_common::backtrace::__rust_begin_short_backtrace::h02781e58294858a3
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/sys_common/backtrace.rs:135:18
  31:     0x5630a595f771 - std::rt::lang_start::{{closure}}::h84b2f74c486ba6a1
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/rt.rs:166:18
  32:     0x5630a5a547fb - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h09286b5638482068
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/core/src/ops/function.rs:284:13
  33:     0x5630a5a547fb - std::panicking::try::do_call::hc4886f4fd1a5066c
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/panicking.rs:500:40
  34:     0x5630a5a547fb - std::panicking::try::hd44a65a82ab950ab
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/panicking.rs:464:19
  35:     0x5630a5a547fb - std::panic::catch_unwind::h0ee9aa0a1712a08d
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/panic.rs:142:14
  36:     0x5630a5a547fb - std::rt::lang_start_internal::{{closure}}::h1f3410f2df20a4d3
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/rt.rs:148:48
  37:     0x5630a5a547fb - std::panicking::try::do_call::h8900088bbeaeb111
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/panicking.rs:500:40
  38:     0x5630a5a547fb - std::panicking::try::hbd6d94ead609e919
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/panicking.rs:464:19
  39:     0x5630a5a547fb - std::panic::catch_unwind::h26d2b6e104bf4814
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/panic.rs:142:14
  40:     0x5630a5a547fb - std::rt::lang_start_internal::h71c5256da3e502b7
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/rt.rs:148:20
  41:     0x5630a595f74a - std::rt::lang_start::ha1b2d54c9c84c075
                               at /rustc/36fb58e433c782e27dd41034284e157cf86d587f/library/std/src/rt.rs:165:17
  42:     0x5630a595fabe - main
  43:     0x7f5cbf8cd850 - <unknown>
  44:     0x7f5cbf8cd90a - __libc_start_main
  45:     0x5630a595f635 - _start
  46:                0x0 - <unknown>

Conditions:

  1. Non-antialiased
  2. Hairline stroke
  3. The width of the Rect is the width of the Canvas

Changing either one of the three will run without a panic.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions