diff options
| author | szukw000 <szukw000@arcor.de> | 2017-07-31 13:58:08 +0200 |
|---|---|---|
| committer | szukw000 <szukw000@arcor.de> | 2017-07-31 13:58:08 +0200 |
| commit | 00f45684a8339e69ed55df2397f3c19d09fecaed (patch) | |
| tree | 171f881e7b3bcad1afed20d69aa7a8c02ec9dad8 /src/bin/common | |
| parent | 13cde9fa37249628af6b6f10601b733f87a025f4 (diff) | |
Catch images broken by AFL
Diffstat (limited to 'src/bin/common')
| -rw-r--r-- | src/bin/common/color.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/bin/common/color.c b/src/bin/common/color.c index 8bb96043..598dc8e6 100644 --- a/src/bin/common/color.c +++ b/src/bin/common/color.c @@ -486,6 +486,34 @@ void color_apply_icc_profile(opj_image_t *image) prec = (int)image->comps[0].prec; if (out_space == cmsSigRgbData) { /* enumCS 16 */ + unsigned int i, nr_comp = image->numcomps; + + if (nr_comp > 4) { + nr_comp = 4; + } + for (i = 1; i < nr_comp; ++i) { /* AFL test */ + if (image->comps[0].dx != image->comps[i].dx) { + break; + } + + if (image->comps[0].dy != image->comps[i].dy) { + break; + } + + if (image->comps[0].prec != image->comps[i].prec) { + break; + } + + if (image->comps[0].sgnd != image->comps[i].sgnd) { + break; + } + + } + if (i != nr_comp) { + cmsCloseProfile(in_prof); + return; + } + if (prec <= 8) { in_type = TYPE_RGB_8; out_type = TYPE_RGB_8; |
