X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fopenjp2%2Fmqc.c;h=4e409a7ce23e4427eb1da92cab29ff2d4aed312f;hb=0069a2bd2f8055b7edf9699332f4f00ac5351564;hp=7e0f5637bf80470f18f13ef8d8ef10a62ca29879;hpb=06f6911d7bd41a2689e56e0195e5713d8cd5b7f7;p=openjpeg.git diff --git a/src/lib/openjp2/mqc.c b/src/lib/openjp2/mqc.c index 7e0f5637..4e409a7c 100644 --- a/src/lib/openjp2/mqc.c +++ b/src/lib/openjp2/mqc.c @@ -203,13 +203,20 @@ static opj_mqc_state_t mqc_states[47 * 2] = { */ static void opj_mqc_byteout(opj_mqc_t *mqc) { - if (*mqc->bp == 0xff) { + /* avoid accessing uninitialized memory*/ + if (mqc->bp == mqc->start-1) { + mqc->bp++; + *mqc->bp = (OPJ_BYTE)(mqc->c >> 19); + mqc->c &= 0x7ffff; + mqc->ct = 8; + } + else if (*mqc->bp == 0xff) { mqc->bp++; *mqc->bp = (OPJ_BYTE)(mqc->c >> 20); mqc->c &= 0xfffff; mqc->ct = 7; } else { - if ((mqc->c & 0x8000000) == 0) { /* ((mqc->c&0x8000000)==0) CHANGE */ + if ((mqc->c & 0x8000000) == 0) { mqc->bp++; *mqc->bp = (OPJ_BYTE)(mqc->c >> 19); mqc->c &= 0x7ffff; @@ -395,9 +402,6 @@ void opj_mqc_init_enc(opj_mqc_t *mqc, OPJ_BYTE *bp) { mqc->c = 0; mqc->bp = bp - 1; mqc->ct = 12; - if (*mqc->bp == 0xff) { - mqc->ct = 13; - } mqc->start = bp; }