[okular] [Bug 359932] Okular is very slow at opening some EPUB's
Milan Hauth
bugzilla_noreply at kde.org
Mon Sep 21 20:04:03 BST 2026
https://bugs.kde.org/show_bug.cgi?id=359932
Milan Hauth <milahu at gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |milahu at gmail.com
--- Comment #25 from Milan Hauth <milahu at gmail.com> ---
i have found a possible minimal reproducer for this bug:
https://github.com/milahu/okular-epub-reader-bug-cpuburn-css-short-fractional-sizes/blob/main/epub_bisect.15.py
all pathological EPUB files have these properties:
- external CSS stylesheet (stored in a separate .css file, not inlined in
.xhtml files)
- a CSS class with a size value with "leading zero omission", for example
`font-size: .5em` instead of `font-size: 0.5em`
- many HTML elements using that CSS class
as soon as the number of HTML elements hits some threshold
okular's CPU load explodes to infinite
(non-linear increase of complexity)
some example numbers are documented in the comments
the "good" number is the number of HTML elements
where the CPU load is still low
the "bad" number is the number of HTML elements
where the CPU load explodes to infinite
in "extreme bad" cases like `font_size=".6666em"`
the characters of the EPUB text are rendered as squares
so these cases seem to hit another threshold
```
test_synthetic_epubs(
output_dir="synthetic-tests",
epub_reader=epub_reader,
# good: CPU load is low
# bad: CPU load explodes to 100%
# font_size=".1em", # bad: bracket: GOOD=272610, BAD=272611
# font_size=".2em", # bad: bracket: GOOD=209700, BAD=209701
# font_size=".3em", # bad: bracket: GOOD=157275, BAD=157276
# font_size=".4em", # bad: bracket: GOOD=120578, BAD=120579
# font_size=".5em", # bad: bracket: GOOD=94365, BAD=94366
# font_size=".6em", # bad: bracket: GOOD=83880, BAD=83881
# font_size=".7em", # bad: bracket: GOOD=73395, BAD=73396
# font_size=".8em", # bad: bracket: GOOD=31954, BAD=31955
# font_size=".9em", # bad: bracket: GOOD=31495, BAD=31496
# font_size=".10em", # bad: bracket: GOOD=26217, BAD=26218
# font_size=".11em", # bad: bracket: GOOD=26212, BAD=26213
font_size=".12em", # bad: bracket: GOOD=20970, BAD=20971
# font_size=".55em", # bad: bracket: GOOD=1053, BAD=1054
# font_size=".85em", # bad: bracket: GOOD=612, BAD=613
# font_size=".99em", # bad: bracket: GOOD=526, BAD=527
# font_size=".88em", # bad: bracket: GOOD=591, BAD=592
# font_size=".66em", # bad: bracket: GOOD=785, BAD=786
# font_size=".777em", # bad: bracket: GOOD=72, BAD=73
# font_size=".666em", # bad: bracket: GOOD=84, BAD=85
# bad: characters are rendered as squares
# font_size=".6666em", # bad
# font_size=".7777em", # bad
# font_size=".77777em", # bad
)
```
todo: write an epub-cleaner.py script to remove all "leading zero omission" CSS
sizes in an EPUB file
to make the EPUB file backward-compatible with old EPUB readers
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the Okular-devel
mailing list