• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

thumbor / thumbor-plugins / 40602763284
99%

Build:
DEFAULT BRANCH: master
Ran 27 Oct 2026 11:32PM UTC
Jobs 7
Files 14
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

27 Oct 2026 11:31PM UTC coverage: 99.448% (+0.06%) from 99.387%
40602763284

push

github

web-flow
fix(gifv): parse filters strictly, check ffmpeg's exit status, add timeout (#128)

should_run and set_format tested "gifv" and "webm" as substrings of the whole
filter chain, so watermark(gifv.png) on a GIF triggered a conversion and
watermark(webm.png) switched the container to WebM. The background_color lookup
split the chain on ":" and called .group() on a regex match that can be None,
so a chain such as background_color:gifv() raised AttributeError and the
request ended in a 500. ffmpeg's exit status was ignored, which left
output_file empty on failure (another 500), and there was no timeout, so a long
GIF could hold thumbor's event loop for as long as the encode took.

Both filters are now matched with anchored regexes: gifv, gifv(), gifv(mp4) and
gifv(webm) at the start of the chain or after a ":" count, anything else
(including an unknown argument) does not, and background_color must carry a
parenthesized value; the gifv pattern matches in linear time even on a long run
of spaces from the URL. A filter list is joined with ":" so the unit tests'
list form keeps working. ffmpeg runs under FFMPEG_TIMEOUT (default 60 seconds,
0 disables), converted from the string that thumbor.conf or --use-environment
can supply, and a negative, infinite or non-numeric value turns the optimizer
off with a warning; a non-zero exit, an empty output or a timeout logs a
warning, copies the GIF over the output and leaves request.format alone so the
original animation is served. README lists the four accepted forms. The unit
test that iterated EXTENSION.items() passed tuples to should_run and could
never fail; it now checks real extensions and filter chains.

45 of 45 new or added lines in 2 files covered. (100.0%)

360 of 362 relevant lines covered (99.45%)

0.99 hits per line

Jobs
ID Job ID Ran Files Coverage
1 run-optimizers/pngcrush - 40602763284.1 27 Oct 2026 11:32PM UTC 2
100.0
GitHub Action Run
2 run-optimizers/optipng - 40602763284.2 27 Oct 2026 11:32PM UTC 2
100.0
GitHub Action Run
3 run-optimizers/pngquant - 40602763284.3 27 Oct 2026 11:32PM UTC 2
100.0
GitHub Action Run
4 run-optimizers/gifv - 40602763284.4 27 Oct 2026 11:32PM UTC 2
100.0
GitHub Action Run
5 run-optimizers/jpegrecompress - 40602763284.5 27 Oct 2026 11:32PM UTC 2
100.0
GitHub Action Run
6 run-optimizers/mozjpeg - 40602763284.6 27 Oct 2026 11:33PM UTC 2
100.0
GitHub Action Run
7 run-optimizers/jp2 - 40602763284.7 27 Oct 2026 11:32PM UTC 2
91.67
GitHub Action Run
Source Files on build 40602763284
  • Tree
  • List 14
  • Changed 2
  • Source Changed 2
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #40602763284
  • e874a2bc on github
  • Prev Build on master (#40602683860)
  • Next Build on master (#40602808535)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc