yob / pdf-reader

The PDF::Reader library implements a PDF parser conforming as much as possible to the PDF specification from Adobe.
MIT License
1.81k stars 271 forks source link

Malformed PDF causes hang with 100% CPU usage #450

Open bcoles opened 2 years ago

bcoles commented 2 years ago

pdf-reader hangs with 100% CPU usage when parsing the attached corrupt/malformed PDFs.

$ grep -rn 'execution expired' crashes/*.trace -A 1
crashes/20220417003806867869681_crash_493.pdf.trace:1:execution expired
crashes/20220417003806867869681_crash_493.pdf.trace-2-/var/lib/gems/2.7.0/gems/pdf-reader-2.9.2/lib/pdf/reader/buffer.rb:369:in `==='
--
crashes/20220417003946304391404_crash_46.pdf.trace:1:execution expired
crashes/20220417003946304391404_crash_46.pdf.trace-2-/var/lib/gems/2.7.0/gems/pdf-reader-2.9.2/lib/pdf/reader/buffer.rb:212:in `last'
--
crashes/20220417004158417521645_crash_436.pdf.trace:1:execution expired
crashes/20220417004158417521645_crash_436.pdf.trace-2-/var/lib/gems/2.7.0/gems/pdf-reader-2.9.2/lib/pdf/reader/buffer.rb:214:in `==='
--
crashes/20220417004215740850757_crash_860.pdf.trace:1:execution expired
crashes/20220417004215740850757_crash_860.pdf.trace-2-/var/lib/gems/2.7.0/gems/pdf-reader-2.9.2/lib/pdf/reader/buffer.rb:363:in `initialize_copy'
--
crashes/20220417004806777986832_crash_556.pdf.trace:1:execution expired
crashes/20220417004806777986832_crash_556.pdf.trace-2-/var/lib/gems/2.7.0/gems/pdf-reader-2.9.2/lib/pdf/reader/xref.rb:132:in `=='
--
crashes/20220417004856762678629_crash_765.pdf.trace:1:execution expired
crashes/20220417004856762678629_crash_765.pdf.trace-2-/var/lib/gems/2.7.0/gems/pdf-reader-2.9.2/lib/pdf/reader/buffer.rb:363:in `initialize_copy'
--
crashes/20220417005354910820796_crash_537.pdf.trace:1:execution expired
crashes/20220417005354910820796_crash_537.pdf.trace-2-/var/lib/gems/2.7.0/gems/pdf-reader-2.9.2/lib/pdf/reader/buffer.rb:370:in `block in prepare_regular_token'
--
crashes/20220417005432127478378_crash_442.pdf.trace:1:execution expired
crashes/20220417005432127478378_crash_442.pdf.trace-2-/var/lib/gems/2.7.0/gems/pdf-reader-2.9.2/lib/pdf/reader/buffer.rb:363:in `initialize_copy'
--
crashes/20220417005536795564792_crash_177.pdf.trace:1:execution expired
crashes/20220417005536795564792_crash_177.pdf.trace-2-/var/lib/gems/2.7.0/gems/pdf-reader-2.9.2/lib/pdf/reader/buffer.rb:212:in `last'

20220417004158417521645_crash_436.pdf 20220417004806777986832_crash_556.pdf 20220417004856762678629_crash_765.pdf 20220417005354910820796_crash_537.pdf 20220417005432127478378_crash_442.pdf 20220417005536795564792_crash_177.pdf 20220417003806867869681_crash_493.pdf 20220417003946304391404_crash_46.pdf 20220417004215740850757_crash_860.pdf