summaryrefslogtreecommitdiff
path: root/third_party/libopenjpeg20/pi.c
diff options
context:
space:
mode:
authorNicolas Pena <npm@chromium.org>2017-05-04 12:08:43 -0400
committerChromium commit bot <commit-bot@chromium.org>2017-05-04 18:50:27 +0000
commit34f735c9ef34b3bb6493016c7fbeb6df76cf31f5 (patch)
tree14200502c3b1bbff1b045da10ce8e574adb6341e /third_party/libopenjpeg20/pi.c
parentcf53b788ca1c097c0cbbca3dee048520eb9dabd4 (diff)
downloadpdfium-34f735c9ef34b3bb6493016c7fbeb6df76cf31f5.tar.xz
Fix undefined shift in opj_get_all_encoding_parameters
The value 1u << (l_pdx + l_level_no) is only used to calculate a minimum, so skip it when the shift doesn't even fit unsigned integer. Also use the uint min version since all values being considered are unsigned anyways. Bug: chromium:666892 Change-Id: I79c6e52022aa894033c5cdabec29c4b8313e293b Reviewed-on: https://pdfium-review.googlesource.com/4891 Reviewed-by: dsinclair <dsinclair@chromium.org> Reviewed-by: Tom Sepez <tsepez@chromium.org> Commit-Queue: Nicolás Peña <npm@chromium.org>
Diffstat (limited to 'third_party/libopenjpeg20/pi.c')
-rw-r--r--third_party/libopenjpeg20/pi.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/third_party/libopenjpeg20/pi.c b/third_party/libopenjpeg20/pi.c
index 0836742222..6af38d0caa 100644
--- a/third_party/libopenjpeg20/pi.c
+++ b/third_party/libopenjpeg20/pi.c
@@ -782,18 +782,18 @@ static void opj_get_all_encoding_parameters( const opj_image_t *p_image,
/* use custom size for precincts*/
l_level_no = l_tccp->numresolutions - 1;
for (resno = 0; resno < l_tccp->numresolutions; ++resno) {
- OPJ_UINT32 l_dx, l_dy;
-
/* precinct width and height*/
l_pdx = l_tccp->prcw[resno];
l_pdy = l_tccp->prch[resno];
*lResolutionPtr++ = l_pdx;
*lResolutionPtr++ = l_pdy;
- l_dx = l_img_comp->dx * (1u << (l_pdx + l_level_no));
- l_dy = l_img_comp->dy * (1u << (l_pdy + l_level_no));
/* take the minimum size for l_dx for each comp and resolution*/
- *p_dx_min = (OPJ_UINT32)opj_int_min((OPJ_INT32)*p_dx_min, (OPJ_INT32)l_dx);
- *p_dy_min = (OPJ_UINT32)opj_int_min((OPJ_INT32)*p_dy_min, (OPJ_INT32)l_dy);
+ if (l_pdx + l_level_no < 32) {
+ *p_dx_min = opj_uint_min(*p_dx_min, l_img_comp->dx * (1u << (l_pdx + l_level_no)));
+ }
+ if (l_pdy + l_level_no < 32) {
+ *p_dy_min = opj_uint_min(*p_dy_min, l_img_comp->dy * (1u << (l_pdy + l_level_no)));
+ }
/* various calculations of extents*/
l_rx0 = opj_int_ceildivpow2(l_tcx0, (OPJ_INT32)l_level_no);