diff options
| author | Antonin Descampe <antonin@gmail.com> | 2016-09-20 18:59:30 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-09-20 18:59:30 +0200 |
| commit | da940424816e11d624362ce080bc026adffa26e8 (patch) | |
| tree | 0af875c5c648e1408d09f9a820b3157dd7e141e7 /src | |
| parent | 31d44f02807a6ce02feead4326e58fac9681c045 (diff) | |
| parent | 893143c8e13e491d0e884eb757580ec9575bbc8f (diff) | |
Merge pull request #834 from trylab/issue833
Fix issue 833.
Diffstat (limited to 'src')
| -rw-r--r-- | src/bin/jp2/convertbmp.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/bin/jp2/convertbmp.c b/src/bin/jp2/convertbmp.c index d264823f..ae83077c 100644 --- a/src/bin/jp2/convertbmp.c +++ b/src/bin/jp2/convertbmp.c @@ -675,10 +675,28 @@ opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters) } } + if (Info_h.biWidth == 0 || Info_h.biHeight == 0) { + fclose(IN); + return NULL; + } + + if (Info_h.biBitCount > (((OPJ_UINT32)-1) - 31) / Info_h.biWidth) { + fclose(IN); + return NULL; + } stride = ((Info_h.biWidth * Info_h.biBitCount + 31U) / 32U) * 4U; /* rows are aligned on 32bits */ if (Info_h.biBitCount == 4 && Info_h.biCompression == 2) { /* RLE 4 gets decoded as 8 bits data for now... */ + if (8 > (((OPJ_UINT32)-1) - 31) / Info_h.biWidth) { + fclose(IN); + return NULL; + } stride = ((Info_h.biWidth * 8U + 31U) / 32U) * 4U; } + + if (stride > ((OPJ_UINT32)-1) / sizeof(OPJ_UINT8) / Info_h.biHeight) { + fclose(IN); + return NULL; + } pData = (OPJ_UINT8 *) calloc(1, stride * Info_h.biHeight * sizeof(OPJ_UINT8)); if (pData == NULL) { fclose(IN); |
