diff --git a/ext/libsmacker/smacker.c b/ext/libsmacker/smacker.c index eef6e7b75..119f22503 100644 --- a/ext/libsmacker/smacker.c +++ b/ext/libsmacker/smacker.c @@ -1224,9 +1224,10 @@ static char smk_render_palette(struct smk_video_t * s, unsigned char * p, unsign p ++; size --; - /* overflow: see if we write/read beyond 256colors, or overwrite own palette */ - if (i + count > 256 || src + count > 256 || - (src < i && src + count > i)) { + /* overflow: see if we write/read beyond 256 colors. Overlap between + the src and dst ranges is fine: src reads from oldPalette, a + snapshot taken above, while we write into s->palette. */ + if (i + count > 256 || src + count > 256) { fprintf(stderr, "libsmacker::palette_render(s,p,size) - ERROR: overflow, 0x40 attempt to copy %d entries from %d to %d\n", count, src, i); goto error; }