Skip to content

Commit c277159

Browse files
committed
[MJ2] Avoid index out of bounds access to pi->include[]
Signed-off-by: Young_X <YangX92@hotmail.com>
1 parent 46822d0 commit c277159

1 file changed

Lines changed: 31 additions & 0 deletions

File tree

src/lib/openmj2/pi.c

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,12 @@ static opj_bool pi_next_cprl(opj_pi_iterator_t * pi);
8585
==========================================================
8686
*/
8787

88+
static void opj_pi_emit_error(opj_pi_iterator_t * pi, const char* msg)
89+
{
90+
(void)pi;
91+
(void)msg;
92+
}
93+
8894
static opj_bool pi_next_lrcp(opj_pi_iterator_t * pi)
8995
{
9096
opj_pi_comp_t *comp = NULL;
@@ -114,6 +120,11 @@ static opj_bool pi_next_lrcp(opj_pi_iterator_t * pi)
114120
for (pi->precno = pi->poc.precno0; pi->precno < pi->poc.precno1; pi->precno++) {
115121
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
116122
pi->step_c + pi->precno * pi->step_p;
123+
/* Avoids index out of bounds access with include*/
124+
if (index >= pi->include_size) {
125+
opj_pi_emit_error(pi, "Invalid access to pi->include");
126+
return OPJ_FALSE;
127+
}
117128
if (!pi->include[index]) {
118129
pi->include[index] = 1;
119130
return OPJ_TRUE;
@@ -156,6 +167,11 @@ static opj_bool pi_next_rlcp(opj_pi_iterator_t * pi)
156167
for (pi->precno = pi->poc.precno0; pi->precno < pi->poc.precno1; pi->precno++) {
157168
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
158169
pi->step_c + pi->precno * pi->step_p;
170+
/* Avoids index out of bounds access with include*/
171+
if (index >= pi->include_size) {
172+
opj_pi_emit_error(pi, "Invalid access to pi->include");
173+
return OPJ_FALSE;
174+
}
159175
if (!pi->include[index]) {
160176
pi->include[index] = 1;
161177
return OPJ_TRUE;
@@ -256,6 +272,11 @@ static opj_bool pi_next_rpcl(opj_pi_iterator_t * pi)
256272
for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
257273
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
258274
pi->step_c + pi->precno * pi->step_p;
275+
/* Avoids index out of bounds access with include*/
276+
if (index >= pi->include_size) {
277+
opj_pi_emit_error(pi, "Invalid access to pi->include");
278+
return OPJ_FALSE;
279+
}
259280
if (!pi->include[index]) {
260281
pi->include[index] = 1;
261282
return OPJ_TRUE;
@@ -356,6 +377,11 @@ static opj_bool pi_next_pcrl(opj_pi_iterator_t * pi)
356377
for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
357378
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
358379
pi->step_c + pi->precno * pi->step_p;
380+
/* Avoids index out of bounds access with include*/
381+
if (index >= pi->include_size) {
382+
opj_pi_emit_error(pi, "Invalid access to pi->include");
383+
return OPJ_FALSE;
384+
}
359385
if (!pi->include[index]) {
360386
pi->include[index] = 1;
361387
return OPJ_TRUE;
@@ -454,6 +480,11 @@ static opj_bool pi_next_cprl(opj_pi_iterator_t * pi)
454480
for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
455481
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
456482
pi->step_c + pi->precno * pi->step_p;
483+
/* Avoids index out of bounds access with include*/
484+
if (index >= pi->include_size) {
485+
opj_pi_emit_error(pi, "Invalid access to pi->include");
486+
return OPJ_FALSE;
487+
}
457488
if (!pi->include[index]) {
458489
pi->include[index] = 1;
459490
return OPJ_TRUE;

0 commit comments

Comments
 (0)