Index: core/src/fxcodec/fx_libopenjpeg/libopenjpeg20/t2.c |
diff --git a/core/src/fxcodec/fx_libopenjpeg/libopenjpeg20/t2.c b/core/src/fxcodec/fx_libopenjpeg/libopenjpeg20/t2.c |
index cdd35e8c222e97ca0eec5646b8404417d276d55b..1a29cccfc67770bf898d120ed6ab7c1016bca184 100644 |
--- a/core/src/fxcodec/fx_libopenjpeg/libopenjpeg20/t2.c |
+++ b/core/src/fxcodec/fx_libopenjpeg/libopenjpeg20/t2.c |
@@ -242,6 +242,11 @@ OPJ_BOOL opj_t2_encode_packets( opj_t2_t* p_t2, |
/* TODO MSD : check why this function cannot fail (cf. v1) */ |
opj_pi_create_encode(l_pi, l_cp,p_tile_no,poc,l_tp_num,p_tp_pos,p_t2_mode); |
+ if (l_current_pi->poc.prg == OPJ_PROG_UNKNOWN) { |
+ /* TODO ADE : add an error */ |
+ opj_pi_destroy(l_pi, l_nb_pocs); |
+ return OPJ_FALSE; |
+ } |
while (opj_pi_next(l_current_pi)) { |
if (l_current_pi->layno < p_maxlayers) { |
l_nb_bytes = 0; |
@@ -274,7 +279,11 @@ OPJ_BOOL opj_t2_encode_packets( opj_t2_t* p_t2, |
opj_pi_create_encode(l_pi, l_cp,p_tile_no,p_pino,p_tp_num,p_tp_pos,p_t2_mode); |
l_current_pi = &l_pi[p_pino]; |
- |
+ if (l_current_pi->poc.prg == OPJ_PROG_UNKNOWN) { |
+ /* TODO ADE : add an error */ |
+ opj_pi_destroy(l_pi, l_nb_pocs); |
+ return OPJ_FALSE; |
+ } |
while (opj_pi_next(l_current_pi)) { |
if (l_current_pi->layno < p_maxlayers) { |
l_nb_bytes=0; |
@@ -386,6 +395,11 @@ OPJ_BOOL opj_t2_decode_packets( opj_t2_t *p_t2, |
} |
memset(first_pass_failed, OPJ_TRUE, l_image->numcomps * sizeof(OPJ_BOOL)); |
+ if (l_current_pi->poc.prg == OPJ_PROG_UNKNOWN) { |
+ /* TODO ADE : add an error */ |
+ opj_pi_destroy(l_pi, l_nb_pocs); |
+ return OPJ_FALSE; |
+ } |
while (opj_pi_next(l_current_pi)) { |
JAS_FPRINTF( stderr, "packet offset=00000166 prg=%d cmptno=%02d rlvlno=%02d prcno=%03d lyrno=%02d\n\n", |
l_current_pi->poc.prg1, l_current_pi->compno, l_current_pi->resno, l_current_pi->precno, l_current_pi->layno ); |
@@ -1265,7 +1279,8 @@ OPJ_BOOL opj_t2_skip_packet_data( opj_t2_t* p_t2, |
} |
do { |
- if (* p_data_read + l_seg->newlen > p_max_length) { |
+ /* Check possible overflow then size */ |
+ if (((*p_data_read + l_seg->newlen) < (*p_data_read)) || ((*p_data_read + l_seg->newlen) > p_max_length)) { |
fprintf(stderr, "skip: segment too long (%d) with max (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n", |
l_seg->newlen, p_max_length, cblkno, p_pi->precno, bandno, p_pi->resno, p_pi->compno); |
return OPJ_FALSE; |