[FFmpeg-cvslog] avcodec/targa: Skip hflip on blank images
Michael Niedermayer
git at videolan.org
Tue Mar 14 03:25:48 EET 2017
ffmpeg | branch: master | Michael Niedermayer <michael at niedermayer.cc> | Mon Mar 13 00:18:04 2017 +0100| [acdacb108d98e42bb631de0d3859958662aa2019] | committer: Michael Niedermayer
avcodec/targa: Skip hflip on blank images
Fixes: timeout with 810/clusterfuzz-testcase-5249282825256960
Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/targets/ffmpeg
Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=acdacb108d98e42bb631de0d3859958662aa2019
---
libavcodec/targa.c | 41 +++++++++++++++++++++--------------------
1 file changed, 21 insertions(+), 20 deletions(-)
diff --git a/libavcodec/targa.c b/libavcodec/targa.c
index 215c0f5..93e0ef7 100644
--- a/libavcodec/targa.c
+++ b/libavcodec/targa.c
@@ -265,32 +265,33 @@ static int decode_frame(AVCodecContext *avctx,
line = advance_line(dst, line, stride, &y, h, interleave);
} while (line);
}
- }
- if (flags & TGA_RIGHTTOLEFT) { // right-to-left, needs horizontal flip
- int x;
- for (y = 0; y < h; y++) {
- void *line = &p->data[0][y * p->linesize[0]];
- for (x = 0; x < w >> 1; x++) {
- switch (bpp) {
- case 32:
- FFSWAP(uint32_t, ((uint32_t *)line)[x], ((uint32_t *)line)[w - x - 1]);
- break;
- case 24:
- FFSWAP(uint8_t, ((uint8_t *)line)[3 * x ], ((uint8_t *)line)[3 * w - 3 * x - 3]);
- FFSWAP(uint8_t, ((uint8_t *)line)[3 * x + 1], ((uint8_t *)line)[3 * w - 3 * x - 2]);
- FFSWAP(uint8_t, ((uint8_t *)line)[3 * x + 2], ((uint8_t *)line)[3 * w - 3 * x - 1]);
- break;
- case 16:
- FFSWAP(uint16_t, ((uint16_t *)line)[x], ((uint16_t *)line)[w - x - 1]);
- break;
- case 8:
- FFSWAP(uint8_t, ((uint8_t *)line)[x], ((uint8_t *)line)[w - x - 1]);
+ if (flags & TGA_RIGHTTOLEFT) { // right-to-left, needs horizontal flip
+ int x;
+ for (y = 0; y < h; y++) {
+ void *line = &p->data[0][y * p->linesize[0]];
+ for (x = 0; x < w >> 1; x++) {
+ switch (bpp) {
+ case 32:
+ FFSWAP(uint32_t, ((uint32_t *)line)[x], ((uint32_t *)line)[w - x - 1]);
+ break;
+ case 24:
+ FFSWAP(uint8_t, ((uint8_t *)line)[3 * x ], ((uint8_t *)line)[3 * w - 3 * x - 3]);
+ FFSWAP(uint8_t, ((uint8_t *)line)[3 * x + 1], ((uint8_t *)line)[3 * w - 3 * x - 2]);
+ FFSWAP(uint8_t, ((uint8_t *)line)[3 * x + 2], ((uint8_t *)line)[3 * w - 3 * x - 1]);
+ break;
+ case 16:
+ FFSWAP(uint16_t, ((uint16_t *)line)[x], ((uint16_t *)line)[w - x - 1]);
+ break;
+ case 8:
+ FFSWAP(uint8_t, ((uint8_t *)line)[x], ((uint8_t *)line)[w - x - 1]);
+ }
}
}
}
}
+
*got_frame = 1;
return avpkt->size;
More information about the ffmpeg-cvslog
mailing list