diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2016-05-26 23:51:32 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2016-05-26 23:51:32 +0200 |
| commit | 7d3c7a345f05adbc9ca26d8ca7f6c7fffa5096be (patch) | |
| tree | 9c4d3dcf1b24de664c1bf87d391e38e43c5e798b /src/lib | |
| parent | 69497d35c0e35a1f9b789d016e9eb4946b8f0fab (diff) | |
Be robust to failed allocations of job structures
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/openjp2/dwt.c | 20 | ||||
| -rw-r--r-- | src/lib/openjp2/t1.c | 5 |
2 files changed, 25 insertions, 0 deletions
diff --git a/src/lib/openjp2/dwt.c b/src/lib/openjp2/dwt.c index e21cc16f..18f8d9c3 100644 --- a/src/lib/openjp2/dwt.c +++ b/src/lib/openjp2/dwt.c @@ -679,6 +679,16 @@ static OPJ_BOOL opj_dwt_decode_tile(opj_thread_pool_t* tp, opj_tcd_tilecomp_t* t opj_dwd_decode_h_job_t* job; job = (opj_dwd_decode_h_job_t*) opj_malloc(sizeof(opj_dwd_decode_h_job_t)); + if( !job ) + { + /* It would be nice to fallback to single thread case, but */ + /* unfortunately some jobs may be launched and have modified */ + /* tiledp, so it is not practical to recover from that error */ + /* FIXME event manager error callback */ + opj_thread_pool_wait_completion(tp, 0); + opj_aligned_free(h.mem); + return OPJ_FALSE; + } job->h = h; job->dwt_1D = dwt_1D; job->rw = rw; @@ -726,6 +736,16 @@ static OPJ_BOOL opj_dwt_decode_tile(opj_thread_pool_t* tp, opj_tcd_tilecomp_t* t opj_dwd_decode_v_job_t* job; job = (opj_dwd_decode_v_job_t*) opj_malloc(sizeof(opj_dwd_decode_v_job_t)); + if( !job ) + { + /* It would be nice to fallback to single thread case, but */ + /* unfortunately some jobs may be launched and have modified */ + /* tiledp, so it is not practical to recover from that error */ + /* FIXME event manager error callback */ + opj_thread_pool_wait_completion(tp, 0); + opj_aligned_free(v.mem); + return OPJ_FALSE; + } job->v = v; job->dwt_1D = dwt_1D; job->rh = rh; diff --git a/src/lib/openjp2/t1.c b/src/lib/openjp2/t1.c index adf64bb4..b1c6128d 100644 --- a/src/lib/openjp2/t1.c +++ b/src/lib/openjp2/t1.c @@ -1689,6 +1689,11 @@ void opj_t1_decode_cblks( opj_thread_pool_t* tp, opj_t1_cblk_decode_processing_job_t* job; job = (opj_t1_cblk_decode_processing_job_t*) opj_calloc(1, sizeof(opj_t1_cblk_decode_processing_job_t)); + if( !job ) + { + *pret = OPJ_FALSE; + return; + } job->resno = resno; job->cblk = cblk; job->band = band; |
