fixed crash bug caused by accessing invalid (off-playfield) array positions
authorHolger Schemel <info@artsoft.org>
Tue, 8 Feb 2022 16:05:47 +0000 (17:05 +0100)
committerHolger Schemel <info@artsoft.org>
Tue, 8 Feb 2022 16:05:47 +0000 (17:05 +0100)
This bug caused accessing array "GfxFrame[][]" out of bounds if level
position is not inside the playfield. (This is always the case when
invoked from "DrawScreenElementExt()" for level border elements.

src/tools.c

index 6a998afb360639bb7611ac472c06ff6b0c7bf497..9fe777c90e0f0b180ff7c6ea1936f83176fb11ae 100644 (file)
@@ -1506,7 +1506,9 @@ int getGraphicAnimationFrameXY(int graphic, int lx, int ly)
     return sync_frame % g->anim_frames;
   }
 
-  return getGraphicAnimationFrame(graphic, GfxFrame[lx][ly]);
+  int sync_frame = (IN_LEV_FIELD(lx, ly) ? GfxFrame[lx][ly] : -1);
+
+  return getGraphicAnimationFrame(graphic, sync_frame);
 }
 
 void getGraphicSourceBitmap(int graphic, int tilesize, Bitmap **bitmap)