@@ -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+
8894static 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