messense / mupdf-rs

Rust binding to mupdf
GNU Affero General Public License v3.0
96 stars 21 forks source link

Segmentation fault at page.to_display_list() #60

Closed c4ys closed 11 months ago

c4ys commented 1 year ago

mupdf相对pdfium以及xpdf一个优势是对多核渲染的支持, 在实际使用mupdf-rs过程中发现部分文件 page.to_display_list()发生Segmentation fault且没有提示, 使用官方mupdf和C++编译的mutool则不会发生错误.

messense commented 1 year ago

Please provide a minimal reproduction code.

c4ys commented 1 year ago
    let doc = PdfDocument::open(path.as_str()).unwrap();
    let num_pages = doc.page_count().unwrap();
    println!("Document has {} page(s)", num_pages);

    let display_list: Vec<(usize, DisplayList)> = doc
        .pages()
        .unwrap()
        .enumerate()
        .map(|(index, p)| {
            let display = p.unwrap().to_display_list(true).unwrap();
            (index, display)
        })
        .collect();

file: https://c4ys.com/wp-content/uploads/2023/02/p11.pdf

c4ys commented 1 year ago

上次是用mutool, 今天试了下用官方多线程也成功了.

https://github.com/ArtifexSoftware/mupdf/blob/master/docs/examples/multi-threaded.c

接下来我有空将mupdf-rs改写下看是否能成功.

messense commented 11 months ago

Fixed in #61