summaryrefslogtreecommitdiff
path: root/libavcodec/targa.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2017-03-13 00:18:04 +0100
committerMichael Niedermayer <michael@niedermayer.cc>2017-03-14 02:23:50 +0100
commitacdacb108d98e42bb631de0d3859958662aa2019 (patch)
tree2b4ba153a335d3cdd3ea00c08471828b7fc039f9 /libavcodec/targa.c
parent1467143a6ebf08a16ec0b833ae462f88345828bd (diff)
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@niedermayer.cc>
Diffstat (limited to 'libavcodec/targa.c')
-rw-r--r--libavcodec/targa.c41
1 files changed, 21 insertions, 20 deletions
diff --git a/libavcodec/targa.c b/libavcodec/targa.c
index 215c0f51f6..93e0ef7905 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;