summaryrefslogtreecommitdiff
path: root/third_party/libopenjpeg20/0030-undefined-shift-opj_get_all_encoding_parameters.patch
blob: 3ba3a2f5b05a7c62e67dc423ed32672f49f2f500 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
diff --git a/third_party/libopenjpeg20/pi.c b/third_party/libopenjpeg20/pi.c
index 083674222..6af38d0ca 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);