aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-10-04 14:51:46 +0200
committerMichael Niedermayer <michaelni@gmx.at>2014-10-05 14:22:09 +0200
commit26da47a09be8a329430b1125b44f7c0c2f2a0868 (patch)
treea76d1530cb4048c513529e224a34dd0c703abcd0
parent23fdcd3b0a7578f7d803d9f163ad7ca091b141ea (diff)
downloadffmpeg-26da47a09be8a329430b1125b44f7c0c2f2a0868.tar.gz
avcodec/h264: Check mode before considering mixed mode intra prediction
Fixes out of array read Fixes: asan_heap-oob_e476fc_2_asan_heap-oob_1333ec6_61_CAMACI3_Sony_C.jsv Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind Signed-off-by: Michael Niedermayer <michaelni@gmx.at> (cherry picked from commit 9734a7a1de3043f012ad0f1ef11027d9488067e6) Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavcodec/h264.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index 82272841f4..9980f1ac8a 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -601,18 +601,18 @@ int ff_h264_check_intra_pred_mode(H264Context *h, int mode, int is_chroma)
if ((h->left_samples_available & 0x8080) != 0x8080) {
mode = left[mode];
- if (is_chroma && (h->left_samples_available & 0x8080)) {
- // mad cow disease mode, aka MBAFF + constrained_intra_pred
- mode = ALZHEIMER_DC_L0T_PRED8x8 +
- (!(h->left_samples_available & 0x8000)) +
- 2 * (mode == DC_128_PRED8x8);
- }
if (mode < 0) {
av_log(h->avctx, AV_LOG_ERROR,
"left block unavailable for requested intra mode at %d %d\n",
h->mb_x, h->mb_y);
return AVERROR_INVALIDDATA;
}
+ if (is_chroma && (h->left_samples_available & 0x8080)) {
+ // mad cow disease mode, aka MBAFF + constrained_intra_pred
+ mode = ALZHEIMER_DC_L0T_PRED8x8 +
+ (!(h->left_samples_available & 0x8000)) +
+ 2 * (mode == DC_128_PRED8x8);
+ }
}
return mode;