ref: 640ddcabccf194900985bcaeab694165ff240446
parent: c5434abc02adcf089c4e8a808d5688cac82638cf
parent: c84d42f86499b0b2af2f57a97ec8ca30529817b5
author: Johann <johannkoenig@google.com>
date: Tue Nov 22 11:21:47 EST 2011
Merge "Validate encoder buffer writes for single token partition"
--- a/vp8/encoder/bitstream.c
+++ b/vp8/encoder/bitstream.c
@@ -221,6 +221,11 @@
w->buffer[x] += 1;
}
+ validate_buffer(w->buffer + w->pos,
+ 1,
+ w->buffer_end,
+ w->error);
+
w->buffer[w->pos++] = (lowvalue >> (24 - offset));
lowvalue <<= offset;
shift = count;
@@ -281,6 +286,11 @@
w->buffer[x] += 1;
}
+ validate_buffer(w->buffer + w->pos,
+ 1,
+ w->buffer_end,
+ w->error);
+
w->buffer[w->pos++] = (lowvalue >> (24 - offset));
lowvalue <<= offset;
shift = count;
@@ -329,6 +339,12 @@
if (!++count)
{
count = -8;
+
+ validate_buffer(w->buffer + w->pos,
+ 1,
+ w->buffer_end,
+ w->error);
+
w->buffer[w->pos++] = (lowvalue >> 24);
lowvalue &= 0xffffff;
}
@@ -664,6 +680,11 @@
w->buffer[x] += 1;
}
+ validate_buffer(w->buffer + w->pos,
+ 1,
+ w->buffer_end,
+ w->error);
+
w->buffer[w->pos++] = (lowvalue >> (24 - offset));
lowvalue <<= offset;
shift = count;
@@ -724,6 +745,11 @@
w->buffer[x] += 1;
}
+ validate_buffer(w->buffer + w->pos,
+ 1,
+ w->buffer_end,
+ w->error);
+
w->buffer[w->pos++] = (lowvalue >> (24 - offset));
lowvalue <<= offset;
shift = count;
@@ -770,6 +796,12 @@
if (!++count)
{
count = -8;
+
+ validate_buffer(w->buffer + w->pos,
+ 1,
+ w->buffer_end,
+ w->error);
+
w->buffer[w->pos++] = (lowvalue >> 24);
lowvalue &= 0xffffff;
}
@@ -1565,6 +1597,9 @@
oh.first_partition_length_in_bytes = 0;
mb_feature_data_bits = vp8_mb_feature_data_bits;
+
+ cpi->bc.error = &pc->error;
+ cpi->bc2.error = &pc->error;
validate_buffer(cx_data, 3, cx_data_end, &cpi->common.error);
cx_data += 3;
--- a/vp8/encoder/onyx_if.c
+++ b/vp8/encoder/onyx_if.c
@@ -4940,7 +4940,7 @@
int64_t store_reg[8];
#endif
VP8_COMP *cpi = (VP8_COMP *) ptr;
- VP8_COMMON *cm = &cpi->common;
+ VP8_COMMON *cm;
struct vpx_usec_timer tsctimer;
struct vpx_usec_timer ticktimer;
struct vpx_usec_timer cmptimer;
@@ -4949,12 +4949,14 @@
if (!cpi)
return -1;
- if (setjmp(cpi->common.error.jmp)){
+ cm = &cpi->common;
+
+ if (setjmp(cpi->common.error.jmp))
+ {
cpi->common.error.setjmp = 0;
return VPX_CODEC_CORRUPT_FRAME;
}
- cpi->bc.error = &cpi->common.error;
cpi->common.error.setjmp = 1;
#if HAVE_ARMV7