mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-12-23 18:19:43 +01:00
Fix indexing out-of-bounds via tile numbers
If a graphics function was provided an out-of-bounds tile number, it would happily segfault the game. So I'm adding checks to prevent that.
This commit is contained in:
parent
5195299e65
commit
d03d8afedf
1 changed files with 34 additions and 1 deletions
|
@ -539,6 +539,10 @@ void Graphics::drawsprite( int x, int y, int t, int r, int g, int b )
|
||||||
|
|
||||||
void Graphics::drawtile( int x, int y, int t )
|
void Graphics::drawtile( int x, int y, int t )
|
||||||
{
|
{
|
||||||
|
if (!INBOUNDS(t, tiles))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
SDL_Rect rect = { Sint16(x), Sint16(y), tiles_rect.w, tiles_rect.h };
|
SDL_Rect rect = { Sint16(x), Sint16(y), tiles_rect.w, tiles_rect.h };
|
||||||
BlitSurfaceStandard(tiles[t], NULL, backBuffer, &rect);
|
BlitSurfaceStandard(tiles[t], NULL, backBuffer, &rect);
|
||||||
}
|
}
|
||||||
|
@ -546,6 +550,10 @@ void Graphics::drawtile( int x, int y, int t )
|
||||||
|
|
||||||
void Graphics::drawtile2( int x, int y, int t )
|
void Graphics::drawtile2( int x, int y, int t )
|
||||||
{
|
{
|
||||||
|
if (!INBOUNDS(t, tiles2))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
SDL_Rect rect = { Sint16(x), Sint16(y), tiles_rect.w, tiles_rect.h };
|
SDL_Rect rect = { Sint16(x), Sint16(y), tiles_rect.w, tiles_rect.h };
|
||||||
BlitSurfaceStandard(tiles2[t], NULL, backBuffer, &rect);
|
BlitSurfaceStandard(tiles2[t], NULL, backBuffer, &rect);
|
||||||
}
|
}
|
||||||
|
@ -554,18 +562,30 @@ void Graphics::drawtile2( int x, int y, int t )
|
||||||
|
|
||||||
void Graphics::drawtile3( int x, int y, int t, int off )
|
void Graphics::drawtile3( int x, int y, int t, int off )
|
||||||
{
|
{
|
||||||
|
if (!INBOUNDS(t, tiles3))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
SDL_Rect rect = { Sint16(x), Sint16(y), tiles_rect.w, tiles_rect.h };
|
SDL_Rect rect = { Sint16(x), Sint16(y), tiles_rect.w, tiles_rect.h };
|
||||||
BlitSurfaceStandard(tiles3[t+(off*30)], NULL, backBuffer, &rect);
|
BlitSurfaceStandard(tiles3[t+(off*30)], NULL, backBuffer, &rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Graphics::drawentcolours( int x, int y, int t)
|
void Graphics::drawentcolours( int x, int y, int t)
|
||||||
{
|
{
|
||||||
|
if (!INBOUNDS(t, entcolours))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
SDL_Rect rect = { Sint16(x), Sint16(y), tiles_rect.w, tiles_rect.h };
|
SDL_Rect rect = { Sint16(x), Sint16(y), tiles_rect.w, tiles_rect.h };
|
||||||
BlitSurfaceStandard(entcolours[t], NULL, backBuffer, &rect);
|
BlitSurfaceStandard(entcolours[t], NULL, backBuffer, &rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Graphics::drawtowertile( int x, int y, int t )
|
void Graphics::drawtowertile( int x, int y, int t )
|
||||||
{
|
{
|
||||||
|
if (!INBOUNDS(t, tiles2))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
SDL_Rect rect = { Sint16(x), Sint16(y), tiles_rect.w, tiles_rect.h };
|
SDL_Rect rect = { Sint16(x), Sint16(y), tiles_rect.w, tiles_rect.h };
|
||||||
BlitSurfaceStandard(tiles2[t], NULL, towerbuffer, &rect);
|
BlitSurfaceStandard(tiles2[t], NULL, towerbuffer, &rect);
|
||||||
}
|
}
|
||||||
|
@ -573,8 +593,13 @@ void Graphics::drawtowertile( int x, int y, int t )
|
||||||
|
|
||||||
void Graphics::drawtowertile3( int x, int y, int t, int off )
|
void Graphics::drawtowertile3( int x, int y, int t, int off )
|
||||||
{
|
{
|
||||||
|
t += off*30;
|
||||||
|
if (!INBOUNDS(t, tiles3))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
SDL_Rect rect = { Sint16(x), Sint16(y), tiles_rect.w, tiles_rect.h };
|
SDL_Rect rect = { Sint16(x), Sint16(y), tiles_rect.w, tiles_rect.h };
|
||||||
BlitSurfaceStandard(tiles3[t+(off*30)], NULL, towerbuffer, &rect);
|
BlitSurfaceStandard(tiles3[t], NULL, towerbuffer, &rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Graphics::drawgui()
|
void Graphics::drawgui()
|
||||||
|
@ -1200,6 +1225,10 @@ void Graphics::drawlevelmenu( int cr, int cg, int cb, int division /*= 30*/ )
|
||||||
|
|
||||||
void Graphics::drawcoloredtile( int x, int y, int t, int r, int g, int b )
|
void Graphics::drawcoloredtile( int x, int y, int t, int r, int g, int b )
|
||||||
{
|
{
|
||||||
|
if (!INBOUNDS(t, tiles))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
setcolreal(getRGB(r,g,b));
|
setcolreal(getRGB(r,g,b));
|
||||||
|
|
||||||
SDL_Rect rect;
|
SDL_Rect rect;
|
||||||
|
@ -2531,6 +2560,10 @@ void Graphics::menuoffrender()
|
||||||
|
|
||||||
void Graphics::drawhuetile( int x, int y, int t, int c )
|
void Graphics::drawhuetile( int x, int y, int t, int c )
|
||||||
{
|
{
|
||||||
|
if (!INBOUNDS(t, tiles))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
point tpoint;
|
point tpoint;
|
||||||
tpoint.x = x;
|
tpoint.x = x;
|
||||||
tpoint.y = y;
|
tpoint.y = y;
|
||||||
|
|
Loading…
Reference in a new issue