From 618e50954f26e4023596d607f5cbdf20920d7ae9 Mon Sep 17 00:00:00 2001 From: Antonin Descampe Date: Fri, 9 Oct 2015 16:56:54 +0200 Subject: [PATCH] Fixes overflow when high number of decompositions Update #603 --- libopenjpeg/pi.c | 10 +++++----- libopenjpeg/pi.h | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/libopenjpeg/pi.c b/libopenjpeg/pi.c index e8e33bfe..c726e4b6 100644 --- a/libopenjpeg/pi.c +++ b/libopenjpeg/pi.c @@ -340,12 +340,12 @@ static opj_bool pi_next_cprl(opj_pi_iterator_t * pi) { pi->dx = 0; pi->dy = 0; for (resno = 0; resno < comp->numresolutions; resno++) { - int dx, dy; + int64 dx, dy; res = &comp->resolutions[resno]; - dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno)); - dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno)); - pi->dx = !pi->dx ? dx : int_min(pi->dx, dx); - pi->dy = !pi->dy ? dy : int_min(pi->dy, dy); + dx = comp->dx * (((int64) 1) << (res->pdx + comp->numresolutions - 1 - resno)); + dy = comp->dy * (((int64) 1) << (res->pdy + comp->numresolutions - 1 - resno)); + pi->dx = !pi->dx ? dx : pi->dx < dx ? pi->dx : dx; + pi->dy = !pi->dy ? dy : pi->dy < dy ? pi->dy : dy; } if (!pi->tp_on){ pi->poc.ty0 = pi->ty0; diff --git a/libopenjpeg/pi.h b/libopenjpeg/pi.h index cf9135fd..3e52e357 100644 --- a/libopenjpeg/pi.h +++ b/libopenjpeg/pi.h @@ -93,8 +93,8 @@ typedef struct opj_pi_iterator { int numcomps; /** Components*/ opj_pi_comp_t *comps; - int tx0, ty0, tx1, ty1; - int x, y, dx, dy; + int tx0, ty0, tx1, ty1; + int64 x, y, dx, dy; } opj_pi_iterator_t; /** @name Exported functions */