Turo Lamminen
2015-05-09 3e738f22cf8883ce4bf6b7afeb0297e4d2924685

Validate cube map size

1 files modified
12 ■■■■■ changed files
mojodds.c 12 ●●●●● patch | view | raw | blame | history
mojodds.c
@@ -351,10 +351,20 @@
        *_cubemapfacelen = 0;
        for (i = 0; i < (int)*_miplevels; i++)
        {
            *_cubemapfacelen += ((MAX( wd, blockDim ) / blockDim) * (MAX( ht, blockDim ) / blockDim)) * blockSize;
            uint32_t mipLen = MAX((wd + blockDim - 1) / blockDim, 1) * MAX((ht + blockDim - 1) / blockDim, 1) * blockSize;
            if (UINT32_MAX - mipLen < *_cubemapfacelen) {
                // data size would overflow 32-bit uint, invalid file
                return 0;
            }
            *_cubemapfacelen += mipLen;
            wd >>= 1;
            ht >>= 1;
        }
        // 6 because cube faces
        if (*len < (*_cubemapfacelen) * 6) {
            return 0;
        }
    }
    else if (*_textureType == MOJODDS_TEXTURE_2D)
    {