Index: third_party/libopenjpeg20/pi.c |
diff --git a/third_party/libopenjpeg20/pi.c b/third_party/libopenjpeg20/pi.c |
index 06f1e411572a33274a180a040e1f2f4dec9ecc2e..462e07c8366382940cc25ae11808b8f205cbaaaa 100644 |
--- a/third_party/libopenjpeg20/pi.c |
+++ b/third_party/libopenjpeg20/pi.c |
@@ -377,6 +377,9 @@ if (!pi->tp_on){ |
prcj = opj_int_floordivpow2(opj_int_ceildiv(pi->y, (OPJ_INT32)(comp->dy << levelno)), (OPJ_INT32)res->pdy) |
- opj_int_floordivpow2(try0, (OPJ_INT32)res->pdy); |
pi->precno = (OPJ_UINT32)(prci + prcj * (OPJ_INT32)res->pw); |
+ if (pi->precno >= res->pw * res->ph) { |
+ return OPJ_FALSE; |
+ } |
for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) { |
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p; |
if (!pi->include[index]) { |
@@ -458,6 +461,9 @@ static OPJ_BOOL opj_pi_next_pcrl(opj_pi_iterator_t * pi) { |
prcj = opj_int_floordivpow2(opj_int_ceildiv(pi->y, (OPJ_INT32)(comp->dy << levelno)), (OPJ_INT32)res->pdy) |
- opj_int_floordivpow2(try0, (OPJ_INT32)res->pdy); |
pi->precno = (OPJ_UINT32)(prci + prcj * (OPJ_INT32)res->pw); |
+ if (pi->precno >= res->pw * res->ph) { |
+ return OPJ_FALSE; |
+ } |
for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) { |
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p; |
if (!pi->include[index]) { |
@@ -537,6 +543,9 @@ static OPJ_BOOL opj_pi_next_cprl(opj_pi_iterator_t * pi) { |
prcj = opj_int_floordivpow2(opj_int_ceildiv(pi->y, (OPJ_INT32)(comp->dy << levelno)), (OPJ_INT32)res->pdy) |
- opj_int_floordivpow2(try0, (OPJ_INT32)res->pdy); |
pi->precno = (OPJ_UINT32)(prci + prcj * (OPJ_INT32)res->pw); |
+ if (pi->precno >= res->pw * res->ph) { |
+ return OPJ_FALSE; |
+ } |
for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) { |
index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p; |
if (!pi->include[index]) { |