Opened 7 years ago
Last modified 7 years ago
#7920 new defect
"-strict_mime_boundary 1" doesn't actually apply a strict boundary
| Reported by: | barsnick | Owned by: | |
|---|---|---|---|
| Priority: | normal | Component: | avformat |
| Version: | git-master | Keywords: | mpjpeg |
| Cc: | barsnick@gmx.net | Blocked By: | |
| Blocking: | Reproduced by developer: | no | |
| Analyzed by developer: | no |
Description
Summary of the bug:
The mpjpegdec option "-strict_mime_boundary 1" doesn't actually apply a strict boundary, as it doesn't find the boundary tag in the "Content-type:" header.
How to reproduce:
You would need a stream which doesn't actually adhere strictly to the boundary specification to notice.
With debug code, you can determine that even if a boundary is given in the "Content-type:" header, mpjpegdec fails to match it and falls back to the non-strict "\r\n--" boundary.
Note:
See TracTickets
for help on using tickets.



Root cause is this:
https://github.com/FFmpeg/FFmpeg/blob/b401a4ab8aa85c536bd9eee0da8f51551b66c70e/libavformat/mpjpegdec.c#L274
Using the call
if (!av_stristart(start, "boundary=", &start)) {the function
mpjpeg_get_boundary()tries to match the parameter for the given multipart boundary.av_stristart(str, pfx, ptr)is documented as:So, assuming this call actually matches the "boundary=" parameter check, it returns non-zero. Unfortunately, the code for the good (match) case is checked with
!, which means it incorrectly checks for zero. In other words, the!is misplaced.