Fix Heap-buffer-overflow READ in opj_jp2_apply_pclr (#1441)
authorAleks L <93376818+sashashura@users.noreply.github.com>
Fri, 12 Aug 2022 13:48:41 +0000 (14:48 +0100)
committerGitHub <noreply@github.com>
Fri, 12 Aug 2022 13:48:41 +0000 (15:48 +0200)
The issue was found while fuzzing opencv:
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=47342

The read overflow triggered by reading `src[j]` in
```cpp
            for (j = 0; j < max; ++j) {
                dst[j] = src[j];
            }
```
The max is calculated as `new_comps[pcol].w * new_comps[pcol].h`, however the `src = old_comps[cmp].data;` which may have different `w` and `h` dimensions.

src/lib/openjp2/jp2.c

index 17572195e391028d81a57968a75990abbc463e41..ec2022722dd51d6d3e52032cde1d30201e0b8b01 100644 (file)
@@ -1108,7 +1108,7 @@ static OPJ_BOOL opj_jp2_apply_pclr(opj_image_t *image,
         pcol = cmap[i].pcol;
         src = old_comps[cmp].data;
         assert(src); /* verified above */
-        max = new_comps[pcol].w * new_comps[pcol].h;
+        max = new_comps[i].w * new_comps[i].h;
 
         /* Direct use: */
         if (cmap[i].mtyp == 0) {