diff --git a/sys/amiga/winchar.c b/sys/amiga/winchar.c index 9636ba3e7..ed486c70e 100644 --- a/sys/amiga/winchar.c +++ b/sys/amiga/winchar.c @@ -130,6 +130,12 @@ ReadImageFile(const char *filename, struct BitMap **bmp) bmhd = (BitMapHeader *) prop->sp_Data; np = bmhd->nPlanes; + if (np > DEPTH) { + errfmt = "%s: too many bitplanes (code %ld)"; + errcode = np; + goto cleanup; + } + /* Load CMAP into palette arrays if present */ prop = FindProp(iff, ID_BMAP, ID_CMAP); if (prop) { @@ -819,7 +825,7 @@ amii_lprint_glyph(winid window, int color_index, int glyph) /* * Add it to the end of the buffer */ - amii_glyph_buffer[glyph_buffer_index++] = glyph; + amii_glyph_buffer[glyph_buffer_index++] = (char) glyph; amii_g_nodes[glyph_node_index - 1].len++; } else { /* See if we're out of glyph nodes */ diff --git a/sys/amiga/winfuncs.c b/sys/amiga/winfuncs.c index e318f3dfa..c5d997ef6 100644 --- a/sys/amiga/winfuncs.c +++ b/sys/amiga/winfuncs.c @@ -1219,9 +1219,9 @@ amii_init_nhwindows(int *argcp, char **argv) if (WINVERS_AMIV) { extern char *tilefile; - if (amii_numcolors >= 32) { + if (amii_numcolors >= AMIV_PALETTE_SIZE) { tilefile = (char *) fqname("tiles/tiles32.iff", DATAPREFIX, 0); - amii_numcolors = 32; + amii_numcolors = AMIV_PALETTE_SIZE; } else { tilefile = (char *) fqname("tiles/tiles16.iff", DATAPREFIX, 0); } @@ -1257,6 +1257,11 @@ amii_init_nhwindows(int *argcp, char **argv) Abort(AN_OpenScreen & ~AT_DeadEnd); } amii_numcolors = 1UL << NewHackScreen.Depth; + { + int palmax = WINVERS_AMIV ? AMIV_PALETTE_SIZE : AMII_PALETTE_SIZE; + if (amii_numcolors > palmax) + amii_numcolors = palmax; + } if (HackScreen->Height > 300 && forcenobig == 0) bigscreen = 1; else