diff options
author | NRK <nrk@disroot.org> | 2021-11-21 09:04:26 +0600 |
---|---|---|
committer | N-R-K <79544946+N-R-K@users.noreply.github.com> | 2021-11-26 15:36:05 +0600 |
commit | 470f50f9f885987e39b335547e2a3809d6b8056f (patch) | |
tree | f2ed48013b445e0458eb54aa10a3629a0f7f24e4 | |
parent | ca7368aa8960ee6b7094b997dcc71ffb5b1e310f (diff) |
fix: img_load_gif: out-of-bound access
according to imlib2's gif loader, bg should already be transparent black
if bg > cmap->ColorCount
-rw-r--r-- | image.c | 11 |
1 files changed, 7 insertions, 4 deletions
@@ -203,10 +203,13 @@ static bool img_load_gif(img_t *img, const fileinfo_t *file) ptr = data = emalloc(sw * sh * sizeof(DATA32)); cmap = gif->Image.ColorMap ? gif->Image.ColorMap : gif->SColorMap; - r = cmap->Colors[bg].Red; - g = cmap->Colors[bg].Green; - b = cmap->Colors[bg].Blue; - bgpixel = 0x00ffffff & (r << 16 | g << 8 | b); + /* if bg > cmap->ColorCount, it is transparent black already */ + if (cmap && bg >= 0 && bg < cmap->ColorCount) { + r = cmap->Colors[bg].Red; + g = cmap->Colors[bg].Green; + b = cmap->Colors[bg].Blue; + bgpixel = 0x00ffffff & (r << 16 | g << 8 | b); + } for (i = 0; i < sh; i++) { for (j = 0; j < sw; j++) { |