File openjpeg2-CVE-2020-27824.patch of Package openjpeg2.36921
Index: openjpeg-2.1.0/src/lib/openjp2/dwt.c
===================================================================
--- openjpeg-2.1.0.orig/src/lib/openjp2/dwt.c
+++ openjpeg-2.1.0/src/lib/openjp2/dwt.c
@@ -514,6 +514,14 @@ OPJ_UINT32 opj_dwt_getgain_real(OPJ_UINT
/* Get norm of 9-7 wavelet. */
/* </summary> */
OPJ_FLOAT64 opj_dwt_getnorm_real(OPJ_UINT32 level, OPJ_UINT32 orient) {
+ /* FIXME ! This is just a band-aid to avoid a buffer overflow */
+ /* but the array should really be extended up to 33 resolution levels */
+ /* See https://github.com/uclouvain/openjpeg/issues/493 */
+ if (orient == 0 && level >= 10) {
+ level = 9;
+ } else if (orient > 0 && level >= 9) {
+ level = 8;
+ }
return opj_dwt_norms_real[orient][level];
}
@@ -531,7 +539,7 @@ void opj_dwt_calc_explicit_stepsizes(opj
if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) {
stepsize = 1.0;
} else {
- OPJ_FLOAT64 norm = opj_dwt_norms_real[orient][level];
+ OPJ_FLOAT64 norm = opj_dwt_getnorm_real(level, orient);
stepsize = (1 << (gain)) / norm;
}
opj_dwt_encode_stepsize((OPJ_INT32) floor(stepsize * 8192.0), (OPJ_INT32)(prec + gain), &tccp->stepsizes[bandno]);