}
res = &comp->resolutions[pi->resno];
levelno = comp->numresolutions - 1 - pi->resno;
+ /* Avoids division by zero */
+ /* Relates to id_000004,sig_06,src_000679,op_arith8,pos_49,val_-17 */
+ /* of https://github.com/uclouvain/openjpeg/issues/938 */
+ if (((comp->dx << levelno) >> levelno) != comp->dx ||
+ ((comp->dy << levelno) >> levelno) != comp->dy) {
+ continue;
+ }
trx0 = opj_int_ceildiv(pi->tx0, (OPJ_INT32)(comp->dx << levelno));
try0 = opj_int_ceildiv(pi->ty0, (OPJ_INT32)(comp->dy << levelno));
trx1 = opj_int_ceildiv(pi->tx1, (OPJ_INT32)(comp->dx << levelno));
OPJ_INT32 prci, prcj;
res = &comp->resolutions[pi->resno];
levelno = comp->numresolutions - 1 - pi->resno;
+ /* Avoids division by zero */
+ /* Relates to id_000004,sig_06,src_000679,op_arith8,pos_49,val_-17 */
+ /* of https://github.com/uclouvain/openjpeg/issues/938 */
+ if (((comp->dx << levelno) >> levelno) != comp->dx ||
+ ((comp->dy << levelno) >> levelno) != comp->dy) {
+ continue;
+ }
trx0 = opj_int_ceildiv(pi->tx0, (OPJ_INT32)(comp->dx << levelno));
try0 = opj_int_ceildiv(pi->ty0, (OPJ_INT32)(comp->dy << levelno));
trx1 = opj_int_ceildiv(pi->tx1, (OPJ_INT32)(comp->dx << levelno));
OPJ_INT32 prci, prcj;
res = &comp->resolutions[pi->resno];
levelno = comp->numresolutions - 1 - pi->resno;
+ /* Avoids division by zero on id_000004,sig_06,src_000679,op_arith8,pos_49,val_-17 */
+ /* of https://github.com/uclouvain/openjpeg/issues/938 */
+ if (((comp->dx << levelno) >> levelno) != comp->dx ||
+ ((comp->dy << levelno) >> levelno) != comp->dy) {
+ continue;
+ }
trx0 = opj_int_ceildiv(pi->tx0, (OPJ_INT32)(comp->dx << levelno));
try0 = opj_int_ceildiv(pi->ty0, (OPJ_INT32)(comp->dy << levelno));
trx1 = opj_int_ceildiv(pi->tx1, (OPJ_INT32)(comp->dx << levelno));