From: Guus Sliepen <guus@debian.org>
Date: Mon, 28 Jun 2010 21:41:06 +0000 (+0200)
Subject: Use snprintf() and strncpy().
X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=78036bae87af5f4c35a6eeb56d443b7cf93fcf73;p=quix0rs-blobwars.git

Use snprintf() and strncpy().
---

diff --git a/src/CAudio.cpp b/src/CAudio.cpp
old mode 100755
new mode 100644
index 1a39fbf..c985f5e
--- a/src/CAudio.cpp
+++ b/src/CAudio.cpp
@@ -34,7 +34,7 @@ Audio::Audio()
 	music = NULL;
 	quickSound = NULL;
 	
-	strcpy(levelMusicName, "");
+	levelMusicName[0] = 0;
 }
 
 void Audio::setSoundVolume(int soundVolume)
@@ -97,7 +97,7 @@ bool Audio::loadMusic(const char *filename)
 {
 	char tempPath[PATH_MAX];
 	
-	sprintf(tempPath, "%smusic.mod", engine->userHomeDirectory);
+	snprintf(tempPath, sizeof tempPath, "%smusic.mod", engine->userHomeDirectory);
 	
 	if (!engine->useAudio)
 	{
@@ -129,7 +129,7 @@ bool Audio::loadMusic(const char *filename)
 		return false;
 	}
 		
-	strcpy(levelMusicName, filename);
+	strncpy(levelMusicName, filename, sizeof levelMusicName);
 
 	return true;
 }
@@ -183,7 +183,7 @@ bool Audio::loadGameOverMusic()
 {
 	char tempPath[PATH_MAX];
 	
-	sprintf(tempPath, "%smusic.mod", engine->userHomeDirectory);
+	snprintf(tempPath, sizeof tempPath, "%smusic.mod", engine->userHomeDirectory);
 	
 	if (!engine->useAudio)
 	{
diff --git a/src/CBoss.cpp b/src/CBoss.cpp
old mode 100755
new mode 100644
diff --git a/src/CCollision.cpp b/src/CCollision.cpp
old mode 100755
new mode 100644
diff --git a/src/CConfig.cpp b/src/CConfig.cpp
old mode 100755
new mode 100644
index 5507f0f..a2bc4ee
--- a/src/CConfig.cpp
+++ b/src/CConfig.cpp
@@ -89,7 +89,7 @@ void Config::doPause()
 bool Config::loadJoystickConfig()
 {
 	char filename[PATH_MAX];
-	sprintf(filename, "%sjoystick.cfg", engine->userHomeDirectory);
+	snprintf(filename, sizeof filename, "%sjoystick.cfg", engine->userHomeDirectory);
 	
 	debug(("Loading joystick config from %s\n", filename));
 	
@@ -114,7 +114,7 @@ bool Config::loadJoystickConfig()
 bool Config::saveJoystickConfig()
 {
 	char filename[PATH_MAX];
-	sprintf(filename, "%sjoystick.cfg", engine->userHomeDirectory);
+	snprintf(filename, sizeof filename, "%sjoystick.cfg", engine->userHomeDirectory);
 	
 	debug(("Saving joystick config to %s\n", filename));
 	
@@ -136,7 +136,7 @@ bool Config::saveJoystickConfig()
 bool Config::loadKeyConfig()
 {
 	char filename[PATH_MAX];
-	sprintf(filename, "%skeyboard.cfg", engine->userHomeDirectory);
+	snprintf(filename, sizeof filename, "%skeyboard.cfg", engine->userHomeDirectory);
 	
 	debug(("Loading keyboard config from %s\n", filename));
 	
@@ -164,7 +164,7 @@ bool Config::loadKeyConfig()
 bool Config::saveKeyConfig()
 {
 	char filename[PATH_MAX];
-	sprintf(filename, "%skeyboard.cfg", engine->userHomeDirectory);
+	snprintf(filename, sizeof filename, "%skeyboard.cfg", engine->userHomeDirectory);
 	
 	debug(("Saving keyboard config to %s\n", filename));
 	
diff --git a/src/CCutscene.cpp b/src/CCutscene.cpp
old mode 100755
new mode 100644
index 5fb0376..e92daae
--- a/src/CCutscene.cpp
+++ b/src/CCutscene.cpp
@@ -22,12 +22,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 Cutscene::Cutscene()
 {
-	strcpy(sprite, "");
-	strcpy(text, "");
+	sprite[0] = 0;
+	text[0] = 0;
 	waitTime = 0;
 }
 
 void Cutscene::appendText(const char *line)
 {
-	sprintf(text, "%s %s", text, line);
+	snprintf(text, sizeof text, "%s %s", text, line);
 }
diff --git a/src/CData.cpp b/src/CData.cpp
old mode 100755
new mode 100644
index 419a619..12642ed
--- a/src/CData.cpp
+++ b/src/CData.cpp
@@ -22,8 +22,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 Data::Data()
 {
-	strcpy(key, "");
-	strcpy(value, "");
+	key[0] = 0;
+	value[0] = 0;
 	current = 0;
 	target = 1;
 }
@@ -36,8 +36,8 @@ void Data::set(const char *key, const char *value, int current, int target)
 		return;
 	}
 
-	strcpy(this->key, key);
-	strcpy(this->value, value);
+	strncpy(this->key, key, sizeof this->key);
+	strncpy(this->value, value, sizeof this->value);
 	this->current = current;
 	this->target = target;
 }
diff --git a/src/CEffect.cpp b/src/CEffect.cpp
old mode 100755
new mode 100644
diff --git a/src/CEngine.cpp b/src/CEngine.cpp
old mode 100755
new mode 100644
index 13a5409..a84d257
--- a/src/CEngine.cpp
+++ b/src/CEngine.cpp
@@ -40,7 +40,7 @@ Engine::Engine()
 	
 	allowJoypad = true;
 
-	strcpy(lastKeyPressed, "");
+	lastKeyPressed[0] = 0;
 
 	fullScreen = 0;
 
@@ -54,7 +54,7 @@ Engine::Engine()
 
 	highlightedWidget = NULL;
 
-	strcpy(message, "");
+	message[0] = 0;
 	messageTime = -1;
 
 	// Development Stuff
@@ -234,7 +234,7 @@ void Engine::getInput()
 				}
 
 				keyState[event.key.keysym.sym] = 1;
-				strcpy(lastKeyPressed, SDL_GetKeyName(event.key.keysym.sym));
+				strncpy(lastKeyPressed, SDL_GetKeyName(event.key.keysym.sym), sizeof lastKeyPressed);
 				addKeyEvent();
 				break;
 
@@ -319,7 +319,7 @@ void Engine::clearInput()
 
 void Engine::setUserHome(const char *path)
 {
-	strcpy(userHomeDirectory, path);
+	strncpy(userHomeDirectory, path, sizeof userHomeDirectory);
 	debug(("User Home = %s\n", path));
 }
 
@@ -384,13 +384,13 @@ bool Engine::unpack(const char *filename, int fileType)
 
 		if (fileType == PAK_MUSIC)
 		{
-			sprintf(tempPath, "%smusic.mod", userHomeDirectory);
+			snprintf(tempPath, sizeof tempPath, "%smusic.mod", userHomeDirectory);
 			fp = fopen(tempPath, "wb");
 		}
 
 		if (fileType == PAK_FONT)
 		{
-			sprintf(tempPath, "%sfont.ttf", userHomeDirectory);
+			snprintf(tempPath, sizeof tempPath, "%sfont.ttf", userHomeDirectory);
 			fp = fopen(tempPath, "wb");
 		}
 
@@ -493,7 +493,7 @@ void Engine::setInfoMessage(const char *message, int priority, int type)
 {
 	if (priority >= messagePriority)
 	{
-		strcpy(this->message, message);
+		strncpy(this->message, message, sizeof this->message);
 		messageTime = 180;
 		messagePriority = priority;
 		messageType = type;
@@ -961,7 +961,7 @@ int Engine::getValueOfFlagTokens(const char *realLine)
 	char line[1024];
 	bool found;
 	int value;
-	strcpy(line, realLine);
+	strncpy(line, realLine, sizeof line);
 
 	int flags = 0;
 
diff --git a/src/CEntity.cpp b/src/CEntity.cpp
old mode 100755
new mode 100644
index 988b6d1..e1575ca
--- a/src/CEntity.cpp
+++ b/src/CEntity.cpp
@@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 Entity::Entity()
 {
-	strcpy(name, "");
+	name[0] = 0;
 	x = y = dx = dy = tx = ty = width = height = 0;
 	id = 0;
 	health = 0;
@@ -52,7 +52,7 @@ Entity::Entity()
 
 void Entity::setName(const char *name)
 {
-	strcpy(this->name, name);
+	strncpy(this->name, name, sizeof this->name);
 }
 
 void Entity::setSprites(Sprite *sprite1, Sprite *sprite2, Sprite *sprite3)
diff --git a/src/CFileData.cpp b/src/CFileData.cpp
old mode 100755
new mode 100644
index c9b989c..f3ebe92
--- a/src/CFileData.cpp
+++ b/src/CFileData.cpp
@@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 FileData::FileData()
 {
-	strcpy(filename, "");
+	filename[0] = 0;
 	fSize = 0;
 	cSize = 0;
 	location = 0;
@@ -36,7 +36,7 @@ void FileData::set(const char *filename, Uint32 fSize, Uint32 cSize, Uint32 loca
 		return;
 	}
 	
-	strcpy(this->filename, filename);
+	strncpy(this->filename, filename, sizeof this->filename);
 	
 	this->fSize = fSize;
 	this->cSize = cSize;
diff --git a/src/CGame.cpp b/src/CGame.cpp
old mode 100755
new mode 100644
index 7741b6d..a5fa060
--- a/src/CGame.cpp
+++ b/src/CGame.cpp
@@ -66,8 +66,8 @@ void Game::clear()
 		bulletsHit[i] = bulletsFired[i] = 0;
 	}
 
-	strcpy(mapName, "data/grasslands1");
-	strcpy(stageName, "Grasslands");
+	strncpy(mapName, "data/grasslands1", sizeof mapName);
+	strncpy(stageName, "Grasslands", sizeof stageName);
 
 	continuesUsed = 0;
 	levelsStarted = 0;
@@ -221,12 +221,12 @@ void Game::totalUpStats()
 
 void Game::setStageName(const char *name)
 {
-	strcpy(stageName, name);
+	strncpy(stageName, name, sizeof stageName);
 }
 
 void Game::setMapName(const char *name)
 {
-	strcpy(mapName, name);
+	strncpy(mapName, name, sizeof mapName);
 }
 
 void Game::setMissionOver(int reason)
diff --git a/src/CGameData.cpp b/src/CGameData.cpp
old mode 100755
new mode 100644
index c722461..a7d17cf
--- a/src/CGameData.cpp
+++ b/src/CGameData.cpp
@@ -83,14 +83,14 @@ void GameData::setMIARescueCount(const char *key, int rescues, int total)
 	Data *data = (Data*)dataList.getHead();
 
 	char newKey[100];
-	sprintf(newKey, "%s MIAs", key);
+	snprintf(newKey, sizeof newKey, "%s MIAs", key);
 
 	while (data->next != NULL)
 	{
 		data = (Data*)data->next;
 		if (strcmp(newKey, data->key) == 0)
 		{
-			strcpy(data->value, "MIAs");
+			strncpy(data->value, "MIAs", sizeof data->value);
 			data->current = rescues;
 			data->target = total;
 			return;
@@ -109,7 +109,7 @@ bool GameData::MIARescued(const char *stageName, char *name)
 	Data *data = (Data*)dataList.getHead();
 
 	char newName[100];
-	sprintf(newName, "MIA_%s", name);
+	snprintf(newName, sizeof newName, "MIA_%s", name);
 
 	while (data->next != NULL)
 	{
diff --git a/src/CGameObject.cpp b/src/CGameObject.cpp
old mode 100755
new mode 100644
diff --git a/src/CGraphics.cpp b/src/CGraphics.cpp
old mode 100755
new mode 100644
index e93d324..390214e
--- a/src/CGraphics.cpp
+++ b/src/CGraphics.cpp
@@ -194,7 +194,7 @@ void Graphics::updateScreen()
 	{
 		if ((Math::prand() % 500) == 0)
 		{
-			sprintf(screenshot, "screenshots/screenshot%.3d.bmp", screenShotNumber);
+			snprintf(screenshot, sizeof screenshot, "screenshots/screenshot%.3d.bmp", screenShotNumber);
 			SDL_SaveBMP(screen, screenshot);
 			screenShotNumber++;
 		}
@@ -204,7 +204,7 @@ void Graphics::updateScreen()
 
 	if (engine->keyState[SDLK_F12])
 	{
-		sprintf(screenshot, "screenshots/screenshot%.3d.bmp", screenShotNumber);
+		snprintf(screenshot, sizeof screenshot, "screenshots/screenshot%.3d.bmp", screenShotNumber);
 		SDL_SaveBMP(screen, screenshot);
 		screenShotNumber++;
 
@@ -476,7 +476,7 @@ void Graphics::loadMapTiles(const char *baseDir)
 {
 	bool found, autoAlpha;
 	char filename[255];
-	strcpy(filename, "");
+	filename[0] = 0;
 
 	autoAlpha = false;
 	
@@ -493,7 +493,7 @@ void Graphics::loadMapTiles(const char *baseDir)
 	{
 		found = true;
 
-		sprintf(filename, "%s/%d.png", baseDir, i);
+		snprintf(filename, sizeof filename, "%s/%d.png", baseDir, i);
 
 		#if USEPAK
 		
@@ -551,7 +551,7 @@ void Graphics::loadFont(int i, const char *filename, int pixelSize)
 	
 	char tempPath[PATH_MAX];
 	
-	sprintf(tempPath, "%sfont.ttf", engine->userHomeDirectory);
+	snprintf(tempPath, sizeof tempPath, "%sfont.ttf", engine->userHomeDirectory);
 
 	bool found = false;
 	int size = 0;
@@ -613,7 +613,7 @@ void Graphics::loadFont(int i, const char *filename, int pixelSize)
 Sprite *Graphics::addSprite(const char *name)
 {
 	Sprite *sprite = new Sprite;
-	strcpy(sprite->name, name);
+	strncpy(sprite->name, name, sizeof sprite->name);
 
 	spriteList.add(sprite);
 
@@ -906,12 +906,12 @@ void Graphics::drawString(const char *in, int x, int y, int alignment, SDL_Surfa
 
 void Graphics::clearChatString()
 {
-	strcpy(chatString, "");
+	chatString[0] = 0;
 }
 
 void Graphics::createChatString(const char *in)
 {
-	sprintf(chatString, "%s %s", chatString, in);
+	snprintf(chatString, sizeof chatString, "%s %s", chatString, in);
 }
 
 void Graphics::drawChatString(SDL_Surface *surface, int y)
@@ -947,7 +947,7 @@ void Graphics::drawChatString(SDL_Surface *surface, int y)
 			continue;
 		}
 
-		sprintf(wordWithSpace, "%s ", word);
+		snprintf(wordWithSpace, sizeof wordWithSpace, "%s ", word);
 
 		wordSurface = getString(wordWithSpace, false);
 
@@ -1004,12 +1004,12 @@ void Graphics::showMedalMessage(int type, const char *in)
 	medalType = type - 1; // for indexing on the image
 	if (type != -1)
 	{
-		sprintf(message, "  Medal Earned - %s  ", in);
+		snprintf(message, sizeof message, "  Medal Earned - %s  ", in);
 		medalMessage = getString(message, true);
 	}
 	else
 	{
-		sprintf(message, "  %s  ", in);
+		snprintf(message, sizeof message, "  %s  ", in);
 		medalMessage = getString(message, true);
 	}
 	medalMessageTimer = (5 * 60);
@@ -1136,7 +1136,7 @@ void Graphics::showErrorAndExit(const char *error, const char *param)
 	}
 
 	char message[256];
-	sprintf(message, error, param);
+	snprintf(message, sizeof message, error, param);
 
 	setFontSize(3); setFontColor(0xff, 0x00, 0x00, 0x00, 0x00, 0x00);
 	drawString("An unforseen error has occurred", 320, 50, true, screen);
diff --git a/src/CHashtable.cpp b/src/CHashtable.cpp
old mode 100755
new mode 100644
diff --git a/src/CHub.cpp b/src/CHub.cpp
old mode 100755
new mode 100644
index 2a85fef..4c8192e
--- a/src/CHub.cpp
+++ b/src/CHub.cpp
@@ -22,8 +22,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 HubLevel::HubLevel()
 {
-	strcpy(stageName, "");
-	strcpy(filename, "");
+	stageName[0] = 0;
+	filename[0] = 0;
 	x = y = 0;
 
 	levelNameImage = NULL;
@@ -33,8 +33,8 @@ HubLevel::HubLevel()
 
 void HubLevel::set(const char *stageName, const char *filename, int x, int y)
 {
-	strcpy(this->stageName, stageName);
-	strcpy(this->filename, filename);
+	strncpy(this->stageName, stageName, sizeof this->stageName);
+	strncpy(this->filename, filename, sizeof this->filename);
 	this->x = x;
 	this->y = y;
 }
diff --git a/src/CJoystick.cpp b/src/CJoystick.cpp
old mode 100755
new mode 100644
diff --git a/src/CKeyboard.cpp b/src/CKeyboard.cpp
old mode 100755
new mode 100644
index 1874317..b9bc5bc
--- a/src/CKeyboard.cpp
+++ b/src/CKeyboard.cpp
@@ -41,7 +41,7 @@ void Keyboard::setDefaultKeys()
 const char *Keyboard::translateKey(int key)
 {
 	static char keyName[50];
-	strcpy(keyName, "");
+	keyName[0] = 0;
 	keyName[0] = '\0';
 	
 	if (key <= 0)
@@ -49,7 +49,7 @@ const char *Keyboard::translateKey(int key)
 		return "...";
 	}
 	
-	strcpy(keyName, _(SDL_GetKeyName((SDLKey)key)));
+	strncpy(keyName, _(SDL_GetKeyName((SDLKey)key)), sizeof keyName);
 	
 	/*
 	This is not really neccessary, but it just makes
diff --git a/src/CLineDef.cpp b/src/CLineDef.cpp
old mode 100755
new mode 100644
index e47757f..916bdf6
--- a/src/CLineDef.cpp
+++ b/src/CLineDef.cpp
@@ -24,18 +24,18 @@ LineDef::LineDef()
 {
 	x = y = 0;
 	width = height = 0;
-	strcpy(name, "");
-	strcpy(linkName, "");
-	strcpy(activateMessage, "");
+	name[0] = 0;
+	linkName[0] = 0;
+	activateMessage[0] = 0;
 	activated = false;
 	next = NULL;
 }
 
 void LineDef::set(const char *name, const char *linkName, const char *activateMessage, int x, int y, int width, int height)
 {
-	strcpy(this->name, name);
-	strcpy(this->linkName, linkName);
-	strcpy(this->activateMessage, activateMessage);
+	strncpy(this->name, name, sizeof this->name);
+	strncpy(this->linkName, linkName, sizeof this->linkName);
+	strncpy(this->activateMessage, activateMessage, sizeof this->activateMessage);
 	this->x = x;
 	this->y = y;
 	this->width = width;
diff --git a/src/CList.cpp b/src/CList.cpp
old mode 100755
new mode 100644
diff --git a/src/CMap.cpp b/src/CMap.cpp
old mode 100755
new mode 100644
index 5f60ad1..72ce787
--- a/src/CMap.cpp
+++ b/src/CMap.cpp
@@ -44,7 +44,7 @@ void Map::clear()
 	limitRight = ((MAPWIDTH - 40) * BRICKSIZE);
 	limitDown = ((MAPHEIGHT - 30) * BRICKSIZE);
 
-	strcpy(name, "");
+	name[0] = 0;
 
 	for (int x = 0 ; x < MAPWIDTH ; x++)
 		for (int y = 0 ; y < MAPHEIGHT ; y++)
@@ -220,7 +220,7 @@ void Map::destroyPersistant(const char *name)
 		
 		if (strcmp(p->stageName, name) == 0)
 		{
-			strcpy(p->stageName, "@none@");
+			strncpy(p->stageName, "@none@", sizeof p->stageName);
 			p->clear();
 			return;
 		}
@@ -229,7 +229,7 @@ void Map::destroyPersistant(const char *name)
 
 void Map::setName(const char *name)
 {
-	strcpy(this->name, name);
+	strncpy(this->name, name, sizeof this->name);
 	
 	if (strstr(name, "BioMech"))
 	{
diff --git a/src/CMath.cpp b/src/CMath.cpp
old mode 100755
new mode 100644
index 76aa6cc..78be8e8
--- a/src/CMath.cpp
+++ b/src/CMath.cpp
@@ -140,13 +140,13 @@ char *Math::formatTime(int t)
 {
 	static char time[1024];
 	
-	strcpy(time, "");
+	time[0] = 0;
 	
 	int hours = t / 3600;
 	int minutes = (t % 3600) / 60;
 	int seconds = (t % 60);
 	
-	sprintf(time, "%dh %dm %ds", hours, minutes, seconds);
+	snprintf(time, sizeof time, "%dh %dm %ds", hours, minutes, seconds);
 	
 	return time;
 }
diff --git a/src/CMedalServer.cpp b/src/CMedalServer.cpp
index 0cd6272..fc9e9b6 100644
--- a/src/CMedalServer.cpp
+++ b/src/CMedalServer.cpp
@@ -28,8 +28,8 @@ MedalServer::MedalServer()
 	connected = false;
 	gotRuby = false;
 	
-	strcpy(message, "");
-	strcpy(rubyMessage, "");
+	message[0] = 0;
+	rubyMessage[0] = 0;
 }
 
 MedalServer::~MedalServer()
@@ -50,7 +50,7 @@ bool MedalServer::connect(const char *privateKey)
 	
 	debug(("Connected %s to %s:%d\n", privateKey, MEDAL_SERVER_HOST, MEDAL_SERVER_PORT));
 	
-	strcpy(this->privateKey, privateKey);
+	strncpy(this->privateKey, privateKey, sizeof this->privateKey);
 	connected = true;
 	
 	return true;
@@ -70,7 +70,7 @@ int MedalServer::postMedal(const char *str)
 	char *store;
 	
 	char medal[128];
-	strcpy(medal, str);
+	strncpy(medal, str, sizeof medal);
 	
 	for (unsigned int i = 0 ; i < strlen(medal) ; i++)
 	{
@@ -93,7 +93,7 @@ int MedalServer::postMedal(const char *str)
 	char *in = new char[1024];
 	char out[1024];
 	
-	sprintf(out, "GET /addMedal/%s/MBS_%s HTTP/1.1\nHost: %s\nUser-Agent:BWMBS%.2f-%d\n\n", privateKey, medal, MEDAL_SERVER_HOST, VERSION, RELEASE);
+	snprintf(out, sizeof out, "GET /addMedal/%s/MBS_%s HTTP/1.1\nHost: %s\nUser-Agent:BWMBS%.2f-%d\n\n", privateKey, medal, MEDAL_SERVER_HOST, VERSION, RELEASE);
 	
 	//printf("%s\n", out);
 	
@@ -123,7 +123,7 @@ int MedalServer::postMedal(const char *str)
 			
 			if (response == 4)
 			{
-				strcpy(rubyMessage, message);
+				strncpy(rubyMessage, message, sizeof rubyMessage);
 				gotRuby = true;
 			}
 			else
diff --git a/src/CObjective.cpp b/src/CObjective.cpp
old mode 100755
new mode 100644
index a1ca9cc..9bf75f3
--- a/src/CObjective.cpp
+++ b/src/CObjective.cpp
@@ -22,8 +22,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 Objective::Objective()
 {
-	strcpy(this->description, "");
-	strcpy(this->target, "");
+	this->description[0] = 0;
+	this->target[0] = 0;
 	this->currentValue = 0;
 	this->targetValue = 0;
 	this->required = false;
@@ -34,8 +34,8 @@ Objective::Objective()
 
 Objective::Objective(const char *description, const char *target, int targetValue, bool required)
 {
-	strcpy(this->description, description);
-	strcpy(this->target, target);
+	strncpy(this->description, description, sizeof this->description);
+	strncpy(this->target, target, sizeof this->target);
 	this->targetValue = targetValue;
 	this->required = required;
 
diff --git a/src/CPak.cpp b/src/CPak.cpp
old mode 100755
new mode 100644
index 65f4ab0..6c4c16a
--- a/src/CPak.cpp
+++ b/src/CPak.cpp
@@ -29,8 +29,8 @@ Pak::Pak()
 	listPos = 0;
 	currentFile = NULL;
 
-	strcpy(pakFilename, "");
-	strcpy(filename, "");
+	pakFilename[0] = 0;
+	filename[0] = 0;
 }
 
 Pak::~Pak()
@@ -61,7 +61,7 @@ void Pak::showPakErrorAndExit()
 void Pak::setPakFile(const char *pakFilename)
 {
 	#if USEPAK
-	strcpy(this->pakFilename, pakFilename);
+	strncpy(this->pakFilename, pakFilename, sizeof this->pakFilename);
 	
 	debug(("Pak : Filename set to %s\n", pakFilename));
 
diff --git a/src/CParticle.cpp b/src/CParticle.cpp
old mode 100755
new mode 100644
diff --git a/src/CPersistData.cpp b/src/CPersistData.cpp
index 9150c00..cd4bf14 100644
--- a/src/CPersistData.cpp
+++ b/src/CPersistData.cpp
@@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 PersistData::PersistData()
 {
-	strcpy(data, "");
+	data[0] = 0;
 }
 
 PersistData::~PersistData()
@@ -37,7 +37,7 @@ bool PersistData::setData(const char *data)
 		return false;
 	}
 	
-	strcpy(this->data, data);
+	strncpy(this->data, data, sizeof this->data);
 	
 	return true;
 }
diff --git a/src/CPersistant.cpp b/src/CPersistant.cpp
old mode 100755
new mode 100644
index 5161f1f..82f03d6
--- a/src/CPersistant.cpp
+++ b/src/CPersistant.cpp
@@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 Persistant::Persistant()
 {
-	strcpy(stageName, "");
+	stageName[0] = 0;
 	numberOfLines = 0;
 }
 
@@ -34,7 +34,7 @@ Persistant::~Persistant()
 
 void Persistant::setName(const char *name)
 {
-	strcpy(this->stageName, name);
+	strncpy(this->stageName, name, sizeof this->stageName);
 }
 
 void Persistant::clear()
diff --git a/src/CRadarBlip.cpp b/src/CRadarBlip.cpp
old mode 100755
new mode 100644
diff --git a/src/CReference.cpp b/src/CReference.cpp
old mode 100755
new mode 100644
diff --git a/src/CReplayData.cpp b/src/CReplayData.cpp
old mode 100755
new mode 100644
index 218fff1..6af8492
--- a/src/CReplayData.cpp
+++ b/src/CReplayData.cpp
@@ -13,7 +13,7 @@ ReplayData::ReplayData()
 	header.version = VERSION;
 	header.release = RELEASE;
 	
-	strcpy(filename, "");
+	filename[0] = 0;
 }
 
 ReplayData::~ReplayData()
diff --git a/src/CSpawnPoint.cpp b/src/CSpawnPoint.cpp
old mode 100755
new mode 100644
index 0d41551..c7c91e5
--- a/src/CSpawnPoint.cpp
+++ b/src/CSpawnPoint.cpp
@@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 SpawnPoint::SpawnPoint()
 {
-	strcpy(name, "");
+	name[0] = 0;
 	active = false;
 	x = y = 0;
 
@@ -42,7 +42,7 @@ void SpawnPoint::reset()
 
 void SpawnPoint::create(const char *name, int x, int y, int spawnType, int spawnSubType, int minInterval, int maxInterval, bool active)
 {
-	strcpy(this->name, name);
+	strncpy(this->name, name, sizeof this->name);
 	this->x = x;
 	this->y = y;
 	this->spawnType = spawnType;
diff --git a/src/CSprite.cpp b/src/CSprite.cpp
old mode 100755
new mode 100644
diff --git a/src/CString.cpp b/src/CString.cpp
old mode 100755
new mode 100644
index 31eda9f..bc70827
--- a/src/CString.cpp
+++ b/src/CString.cpp
@@ -31,7 +31,7 @@ String::String(char *text)
 
 	this->text = new char[size + 1];
 
-	strcpy(this->text, text);
+	strncpy(this->text, text, sizeof this->text);
 
 	this->length = size;
 }
@@ -65,7 +65,7 @@ void String::trim()
 		c++; // LOL!!! :)
 	}
 
-	strcpy(tempText, c);
+	strncpy(tempText, c, sizeof tempText);
 
 	int len = strlen(tempText);
 	
@@ -97,7 +97,7 @@ void String::operator= (char *text)
 
 	this->text = new char[size + 1];
 
-	strcpy(this->text, text);
+	strncpy(this->text, text, sizeof this->text);
 
 	this->length = size;
 }
@@ -144,18 +144,18 @@ bool String::operator!= (String string)
 
 void String::setText(char *text, ...)
 {
-	strcpy(tmpString, "");
+	tmpString[0] = 0;
 	
 	va_list argp;
 	va_start(argp, text);
-	vsprintf(tmpString, text, argp);
+	vsnprintf(tmpString, sizeof tmpString, text, argp);
 	va_end(argp);
 	
 	int size = strlen(tmpString);
 
 	this->text = new char[size + 1];
 
-	strcpy(this->text,  tmpString);
+	strncpy(this->text,  tmpString, sizeof this->text);
 }
 
 char *String::getText()
diff --git a/src/CSwitch.cpp b/src/CSwitch.cpp
old mode 100755
new mode 100644
index ae39a2a..d5492f4
--- a/src/CSwitch.cpp
+++ b/src/CSwitch.cpp
@@ -22,10 +22,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 Switch::Switch()
 {
-	strcpy(this->name, "");
-	strcpy(this->linkName, "");
-	strcpy(this->requiredObjectName, "");
-	strcpy(this->activateMessage, "");
+	this->name[0] = 0;
+	this->linkName[0] = 0;
+	this->requiredObjectName[0] = 0;
+	this->activateMessage[0] = 0;
 
 	type = 0;
 	x = y = 0;
@@ -37,10 +37,10 @@ Switch::Switch()
 
 void Switch::set(const char *name, const char *linkName, const char *requiredObjectName, const char *activateMessage, int type, int x, int y, bool activated)
 {
-	strcpy(this->name, name);
-	strcpy(this->linkName, linkName);
-	strcpy(this->requiredObjectName, requiredObjectName);
-	strcpy(this->activateMessage, activateMessage);
+	strncpy(this->name, name, sizeof this->name);
+	strncpy(this->linkName, linkName, sizeof this->linkName);
+	strncpy(this->requiredObjectName, requiredObjectName, sizeof this->requiredObjectName);
+	strncpy(this->activateMessage, activateMessage, sizeof this->activateMessage);
 	this->type = type;
 	this->x = x;
 	this->y = y;
diff --git a/src/CTeleporter.cpp b/src/CTeleporter.cpp
old mode 100755
new mode 100644
index 50a9a2c..9f213aa
--- a/src/CTeleporter.cpp
+++ b/src/CTeleporter.cpp
@@ -29,7 +29,7 @@ Teleporter::Teleporter()
 
 void Teleporter::setName(const char *name)
 {
-	strcpy(this->name, name);
+	strncpy(this->name, name, sizeof this->name);
 }
 
 void Teleporter::set(int x, int y, int destX, int destY)
diff --git a/src/CTrain.cpp b/src/CTrain.cpp
old mode 100755
new mode 100644
index 91f6b3d..b385278
--- a/src/CTrain.cpp
+++ b/src/CTrain.cpp
@@ -76,7 +76,7 @@ bool Train::waitsForPlayer()
 
 void Train::setName(const char *name)
 {
-	strcpy(this->name, name);
+	strncpy(this->name, name, sizeof this->name);
 }
 
 void Train::set(int startX, int startY, int endX, int endY, int pause, bool fromStart)
diff --git a/src/CTrap.cpp b/src/CTrap.cpp
old mode 100755
new mode 100644
index ce6a791..224f924
--- a/src/CTrap.cpp
+++ b/src/CTrap.cpp
@@ -30,7 +30,7 @@ Trap::Trap()
 
 void Trap::setName(const char *name)
 {
-	strcpy(this->name, name);
+	strncpy(this->name, name, sizeof this->name);
 }
 
 void Trap::setTrapType(int type)
diff --git a/src/CWeapon.cpp b/src/CWeapon.cpp
old mode 100755
new mode 100644
index 0fecc46..7268b8b
--- a/src/CWeapon.cpp
+++ b/src/CWeapon.cpp
@@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 Weapon::Weapon()
 {
-	strcpy(name, "");
+	name[0] = 0;
 	id = 0;
 	damage = 0;
 	reload = 0;
@@ -34,7 +34,7 @@ Weapon::Weapon()
 
 void Weapon::setName(const char *name)
 {
-	strcpy(this->name, name);
+	strncpy(this->name, name, sizeof this->name);
 }
 
 int Weapon::getSpeed(int face)
diff --git a/src/CWidget.cpp b/src/CWidget.cpp
old mode 100755
new mode 100644
index 85c7e40..fbf8c38
--- a/src/CWidget.cpp
+++ b/src/CWidget.cpp
@@ -22,10 +22,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 Widget::Widget()
 {
-	strcpy(name, "");
-	strcpy(groupName, "");
-	strcpy(label, "");
-	strcpy(options, "");
+	name[0] = 0;
+	groupName[0] = 0;
+	label[0] = 0;
+	options[0] = 0;
 	x = y = type = min = max = 0;
 	enabled = visible = true;
 	changed = false;
@@ -43,10 +43,10 @@ void Widget::setProperties(const char *name, const char *groupName, const char *
 		exit(1);
 	}
 
-	strcpy(this->name, name);
-	strcpy(this->groupName, groupName);
-	strcpy(this->label, label);
-	strcpy(this->options, options);
+	strncpy(this->name, name, sizeof this->name);
+	strncpy(this->groupName, groupName, sizeof this->groupName);
+	strncpy(this->label, label, sizeof this->label);
+	strncpy(this->options, options, sizeof this->options);
 	this->x = x;
 	this->y = y;
 	this->min = min;
diff --git a/src/aquaBoss.cpp b/src/aquaBoss.cpp
old mode 100755
new mode 100644
index 34c5a9e..73df1ab
--- a/src/aquaBoss.cpp
+++ b/src/aquaBoss.cpp
@@ -287,7 +287,7 @@ void aquaBossMainInit()
 	debug(("aquaBossMainInit\n"));
 	
 	map.boss[0] = new Boss();
-	strcpy(map.boss[0]->name, "BioMech Aqua Blob");
+	strncpy(map.boss[0]->name, "BioMech Aqua Blob", sizeof map.boss[0]->name);
 	map.boss[0]->health = 45 * game.skill;
 	map.boss[0]->maxHealth = 45 * game.skill;
 	map.boss[0]->setSprites(graphics.getSprite("AquaBossRight", true), graphics.getSprite("AquaBossLeft", true), graphics.getSprite("AquaBossLeft", true));
diff --git a/src/bosses.cpp b/src/bosses.cpp
old mode 100755
new mode 100644
diff --git a/src/bullets.cpp b/src/bullets.cpp
old mode 100755
new mode 100644
diff --git a/src/cutscene.cpp b/src/cutscene.cpp
old mode 100755
new mode 100644
index 586e5b2..3542842
--- a/src/cutscene.cpp
+++ b/src/cutscene.cpp
@@ -51,7 +51,7 @@ void createSceneList()
 			line = strtok(NULL, "\n");
 			if (strcmp(line, "@none@") != 0)
 			{
-				strcpy(scene->sprite, line);
+				strncpy(scene->sprite, line, sizeof scene->sprite);
 				debug(("Loading cutscene image %s\n", scene->sprite));
 				graphics.quickSprite(scene->sprite, graphics.loadImage(scene->sprite));
 			}
@@ -219,7 +219,7 @@ void checkStartCutscene()
 	audio.loadMusic("music/daisyChain2.mod");
 	
 	char sceneName[1024];
-	sprintf(sceneName, "%s Start", game.stageName);
+	snprintf(sceneName, sizeof sceneName, "%s Start", game.stageName);
 	
 	if (setupScene(sceneName))
 	{
@@ -248,7 +248,7 @@ void checkEndCutscene()
 	}
 	
 	char sceneName[1024];
-	sprintf(sceneName, "%s End", game.stageName);
+	snprintf(sceneName, sizeof sceneName, "%s End", game.stageName);
 	
 	debug(("%s\n", sceneName));
 	
diff --git a/src/droidBoss.cpp b/src/droidBoss.cpp
old mode 100755
new mode 100644
index 353f7ea..69e8aa3
--- a/src/droidBoss.cpp
+++ b/src/droidBoss.cpp
@@ -365,7 +365,7 @@ void droidBossInit()
 	debug(("droidBossInit\n"));
 	
 	map.boss[0] = new Boss();
-	strcpy(map.boss[0]->name, "BioMech Jetpack Blob");
+	strncpy(map.boss[0]->name, "BioMech Jetpack Blob", sizeof map.boss[0]->name);
 	map.boss[0]->health = 30 * game.skill;
 	map.boss[0]->maxHealth = 30 * game.skill;
 	map.boss[0]->setSprites(graphics.getSprite("JetpackBlobRight1", true), graphics.getSprite("JetpackBlobLeft1", true), graphics.getSprite("JetpackBlobLeft1", true));
@@ -387,7 +387,7 @@ void droidBossInit()
 	for (int i = 1 ; i < 6 ; i++)
 	{
 		map.boss[i] = new Boss();
-		strcpy(map.boss[i]->name, "Orb Bomb");
+		strncpy(map.boss[i]->name, "Orb Bomb", sizeof map.boss[i]->name);
 		map.boss[i]->setSprites(graphics.getSprite("DroidOrb", true), graphics.getSprite("DroidOrb", true), graphics.getSprite("DroidOrb", true));
 		map.boss[i]->active = false;
 		map.boss[i]->face = 1;
diff --git a/src/effects.cpp b/src/effects.cpp
old mode 100755
new mode 100644
diff --git a/src/enemies.cpp b/src/enemies.cpp
old mode 100755
new mode 100644
index 9179ebc..1e59f83
--- a/src/enemies.cpp
+++ b/src/enemies.cpp
@@ -377,7 +377,7 @@ void enemyBulletCollisions(Entity *bullet)
 
 		if ((bullet->owner == &player) || (bullet->owner == &engine.world) || (bullet->flags & ENT_BOSS))
 		{
-			sprintf(comboString, "Combo-%s", bullet->name);
+			snprintf(comboString, sizeof comboString, "Combo-%s", bullet->name);
 
 			if (Collision::collision(enemy, bullet))
 			{
@@ -514,7 +514,7 @@ void enemyBulletCollisions(Entity *bullet)
 				if (game.currentComboHits >= 3)
 				{
 					char message[50];
-					sprintf(message, _("%d Hit Combo!"), game.currentComboHits);
+					snprintf(message, sizeof message, _("%d Hit Combo!"), game.currentComboHits);
 					engine.setInfoMessage(message, 0, INFO_NORMAL);
 				}
 
@@ -848,7 +848,7 @@ void loadDefEnemies()
 {
 	for (int i = 0 ; i < MAX_ENEMIES ; i++)
 	{
-		strcpy(defEnemy[i].name, "");
+		defEnemy[i].name[0] = 0;
 	}
 
 	int enemy = 0;
diff --git a/src/entities.cpp b/src/entities.cpp
old mode 100755
new mode 100644
diff --git a/src/explosions.cpp b/src/explosions.cpp
old mode 100755
new mode 100644
diff --git a/src/finalBattle.cpp b/src/finalBattle.cpp
old mode 100755
new mode 100644
index cf06372..e69b96f
--- a/src/finalBattle.cpp
+++ b/src/finalBattle.cpp
@@ -147,7 +147,7 @@ void galdovInitBlackDroids()
 			map.boss[i] = new Boss();
 		}
 		debug(("BlackDroid %d init\n", i));
-		strcpy(map.boss[i]->name, "BlackDrod");
+		strncpy(map.boss[i]->name, "BlackDrod", sizeof map.boss[i]->name);
 		map.boss[i]->health = -90;
 		map.boss[i]->maxHealth = -90;
 		map.boss[i]->setSprites(graphics.getSprite("BlackDroidRight", true), graphics.getSprite("BlackDroidLeft", true), graphics.getSprite("BlackDroidDie", true));
@@ -493,7 +493,7 @@ void galdovFinalSplit()
 		if (map.boss[i] == NULL)
 		{
 			map.boss[i] = new Boss();
-			strcpy(map.boss[i]->name, "MiniGaldov");
+			strncpy(map.boss[i]->name, "MiniGaldov", sizeof map.boss[i]->name);
 			map.boss[i]->health = 10 * game.skill;
 			map.boss[i]->maxHealth = 10 * game.skill;
 		}
@@ -556,7 +556,7 @@ void galdovFinalInit()
 	debug(("galdovFinalInit\n"));
 	
 	map.boss[0] = new Boss();
-	strcpy(map.boss[0]->name, "Galdov");
+	strncpy(map.boss[0]->name, "Galdov", sizeof map.boss[0]->name);
 	map.boss[0]->health = 45 * game.skill;
 	map.boss[0]->maxHealth = 45 * game.skill;
 	map.boss[0]->setSprites(graphics.getSprite("GaldovRight", true), graphics.getSprite("GaldovLeft", true), graphics.getSprite("GaldovDie", true));
@@ -680,7 +680,7 @@ void galdovFinalShieldInit()
 			delete map.boss[i];
 		}
 		map.boss[i] = new Boss();
-		strcpy(map.boss[i]->name, "OrbBomb");
+		strncpy(map.boss[i]->name, "OrbBomb", sizeof map.boss[i]->name);
 		map.boss[i]->setSprites(graphics.getSprite("DroidOrb", true), graphics.getSprite("DroidOrb", true), graphics.getSprite("DroidOrb", true));
 		map.boss[i]->health = 999999;
 		map.boss[i]->maxHealth = 99999;
diff --git a/src/galdov.cpp b/src/galdov.cpp
old mode 100755
new mode 100644
index 6ef5762..5de463f
--- a/src/galdov.cpp
+++ b/src/galdov.cpp
@@ -456,7 +456,7 @@ void galdovInit()
 	debug(("galdovInit\n"));
 	
 	map.boss[0] = new Boss();
-	strcpy(map.boss[0]->name, "Galdov");
+	strncpy(map.boss[0]->name, "Galdov", sizeof map.boss[0]->name);
 	map.boss[0]->health = 45 * game.skill;
 	map.boss[0]->maxHealth = 45 * game.skill;
 	map.boss[0]->setSprites(graphics.getSprite("GaldovRight", true), graphics.getSprite("GaldovLeft", true), graphics.getSprite("GaldovLeft", true));
@@ -480,7 +480,7 @@ void galdovInit()
 	for (int i = 1 ; i < 10 ; i++)
 	{
 		map.boss[i] = new Boss();
-		strcpy(map.boss[i]->name, "Fake");
+		strncpy(map.boss[i]->name, "Fake", sizeof map.boss[i]->name);
 		map.boss[i]->setSprites(graphics.getSprite("GaldovRight", true), graphics.getSprite("GaldovLeft", true), graphics.getSprite("GaldovLeft", true));
 		map.boss[i]->x = 9999;
 		map.boss[i]->y = 9999;
diff --git a/src/game.cpp b/src/game.cpp
old mode 100755
new mode 100644
index cff9414..b10c68a
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -316,7 +316,7 @@ int gameover()
 	if (game.canContinue > 1)
 	{
 		Widget *widget = engine.getWidgetByName("gameOverNo");
-		sprintf(widget->label, "%s (%d)", widget->label, game.canContinue);
+		snprintf(widget->label, sizeof widget->label, "%s (%d)", widget->label, game.canContinue);
 	}
 
 	while (true)
@@ -408,13 +408,13 @@ void showMissionInformation()
 	if (map.totalMIAs > 0)
 	{
 		graphics.setFontColor(0xff, 0xff, 0xff, 0x00, 0x00, 0x00);
-		sprintf(message, _("Rescue %d MIAs"), map.requiredMIAs);
+		snprintf(message, sizeof message, _("Rescue %d MIAs"), map.requiredMIAs);
 		graphics.drawString(message, col1, y, TXT_LEFT, panel);
 
 		if (map.foundMIAs < map.requiredMIAs)
 		{
 			graphics.setFontColor(0xff, 0x00, 0x00, 0x00, 0x00, 0x00);
-			sprintf(message, "%d / %d", map.foundMIAs, map.requiredMIAs);
+			snprintf(message, sizeof message, "%d / %d", map.foundMIAs, map.requiredMIAs);
 			graphics.drawString(message, col2, y, TXT_RIGHT, panel);
 		}
 		else
@@ -458,7 +458,7 @@ void showMissionInformation()
 			}
 			else
 			{
-				sprintf(message, "%d / %d", objective->currentValue, objective->targetValue);
+				snprintf(message, sizeof message, "%d / %d", objective->currentValue, objective->targetValue);
 				graphics.drawString(message, col2, y, TXT_RIGHT, panel);
 			}
 		}
@@ -472,7 +472,7 @@ void showMissionInformation()
 	if (game.skill == 3)
 	{
 		graphics.setFontColor(0xff, 0xff, 0x00, 0x00, 0x00, 0x00);
-		sprintf(message, _("Time Limit - %d:%.2d Minutes"), map.remainingMinutes, map.remainingSeconds);
+		snprintf(message, sizeof message, _("Time Limit - %d:%.2d Minutes"), map.remainingMinutes, map.remainingSeconds);
 		graphics.drawString(message, 200, 260, TXT_CENTERED, panel);
 	}
 	
@@ -572,7 +572,7 @@ int doGame()
 	#if !USEPAK
 	Uint32 now;
 	char fps[10];
-	strcpy(fps, "fps");
+	strncpy(fps, "fps", sizeof fps);
 	#endif
 
 	engine.messageTime = -1;
@@ -845,7 +845,7 @@ int doGame()
 		if (SDL_GetTicks() > frameCounter + 500)
 		{
 			now = SDL_GetTicks();
-			sprintf(fps, "%2.2f fps", ((double)frames*1000)/(now - then));
+			snprintf(fps, sizeof fps, "%2.2f fps", ((double)frames*1000)/(now - then));
 			then = frameCounter = SDL_GetTicks();
 			frames = 0;
 		}
diff --git a/src/graphics.cpp b/src/graphics.cpp
old mode 100755
new mode 100644
diff --git a/src/hub.cpp b/src/hub.cpp
old mode 100755
new mode 100644
index f6540ef..ad7d382
--- a/src/hub.cpp
+++ b/src/hub.cpp
@@ -43,31 +43,31 @@ void createStatsPanel(int page)
 	{
 		case 0:
 			graphics.drawString(_("Skill Level:"), x1, y += 20, false, image);
-			sprintf(string, "%s", _(skill[game.skill]));
+			snprintf(string, sizeof string, "%s", _(skill[game.skill]));
 			graphics.drawString(string, x2, y, false, image);
 
 			graphics.drawString(_("Score:"), x1, y += 20, false, image);
-			sprintf(string, "%d", game.score);
+			snprintf(string, sizeof string, "%d", game.score);
 			graphics.drawString(string, x2, y, false, image);
 
 			graphics.drawString(_("MIAs Saved:"), x1, y += 20, false, image);
-			sprintf(string, "%d", game.totalMIAsRescued);
+			snprintf(string, sizeof string, "%d", game.totalMIAsRescued);
 			graphics.drawString(string, x2, y, false, image);
 
 			graphics.drawString(_("Objectives Completed:"), x1, y += 20, false, image);
-			sprintf(string, "%d", game.totalObjectivesCompleted);
+			snprintf(string, sizeof string, "%d", game.totalObjectivesCompleted);
 			graphics.drawString(string, x2, y, false, image);
 
 			// Don't do this on Extreme or it will always say 100%
 			if (game.skill < 3)
 			{
 				graphics.drawString(_("Percentage Complete:"), x1, y += 20, false, image);
-				sprintf(string, "%d%%", gameData.getPercentageComplete());
+				snprintf(string, sizeof string, "%d%%", gameData.getPercentageComplete());
 				graphics.drawString(string, x2, y, false, image);
 			}
 
-			sprintf(string, "%s", _("Total Game Time"));
-			sprintf(string, "%s - %.2d:%.2d:%.2d", string, game.totalHours, game.totalMinutes, game.totalSeconds);
+			snprintf(string, sizeof string, "%s", _("Total Game Time"));
+			snprintf(string, sizeof string, "%s - %.2d:%.2d:%.2d", string, game.totalHours, game.totalMinutes, game.totalSeconds);
 			graphics.drawString(string, 200, y += 110, true, image);
 
 			break;
@@ -75,38 +75,38 @@ void createStatsPanel(int page)
 		case 1:
 
 			graphics.drawString(_("Enemies Defeated:"), x1, y += 20, false, image);
-			sprintf(string, "%d", game.totalEnemiesDefeated);
+			snprintf(string, sizeof string, "%d", game.totalEnemiesDefeated);
 			graphics.drawString(string, x2, y, false, image);
 
 			graphics.drawString(_("Items Collected:"), x1, y += 20, false, image);
-			sprintf(string, "%d", game.totalItemsCollected);
+			snprintf(string, sizeof string, "%d", game.totalItemsCollected);
 			graphics.drawString(string, x2, y, false, image);
 
 			graphics.drawString(_("Bonuses Picked Up:"), x1, y += 20, false, image);
-			sprintf(string, "%d", game.totalBonusesCollected);
+			snprintf(string, sizeof string, "%d", game.totalBonusesCollected);
 			graphics.drawString(string, x2, y, false, image);
 
 			graphics.drawString(_("Best Combo:"), x1, y += 20, false, image);
-			sprintf(string, _("%d Hits"), game.maxComboHits);
+			snprintf(string, sizeof string, _("%d Hits"), game.maxComboHits);
 			graphics.drawString(string, x2, y, false, image);
 			
 			graphics.drawString(_("Missions Started:"), x1, y += 20, false, image);
-			sprintf(string, "%d", game.levelsStarted);
+			snprintf(string, sizeof string, "%d", game.levelsStarted);
 			graphics.drawString(string, x2, y, false, image);
 
 			graphics.drawString(_("Continues Used:"), x1, y += 20, false, image);
-			sprintf(string, "%d", game.continuesUsed);
+			snprintf(string, sizeof string, "%d", game.continuesUsed);
 			graphics.drawString(string, x2, y, false, image);
 			
 			if ((game.continuesUsed > 0) && (game.levelsStarted > 0))
 			{
 				graphics.drawString(_("Average Continue Usage:"), x1, y += 20, false, image);
-				sprintf(string, "%d", (game.continuesUsed / game.levelsStarted));
+				snprintf(string, sizeof string, "%d", (game.continuesUsed / game.levelsStarted));
 				graphics.drawString(string, x2, y, false, image);
 			}
 
 			graphics.drawString(_("Escapes Used:"), x1, y += 20, false, image);
-			sprintf(string, "%d", game.escapes);
+			snprintf(string, sizeof string, "%d", game.escapes);
 			graphics.drawString(string, x2, y, false, image);
 
 			break;
@@ -122,42 +122,42 @@ void createStatsPanel(int page)
 			graphics.drawString(_("Accuracy"), x3, y, false, image);
 
 			graphics.drawString(_("Pistol"), x1, y += 30, false, image);
-			sprintf(string, "%d", game.bulletsFired[WP_PISTOL]);
+			snprintf(string, sizeof string, "%d", game.bulletsFired[WP_PISTOL]);
 			graphics.drawString(string, x2, y, false, image);
-			sprintf(string, "%d%%", game.getWeaponAccuracy(WP_PISTOL));
+			snprintf(string, sizeof string, "%d%%", game.getWeaponAccuracy(WP_PISTOL));
 			graphics.drawString(string, x3, y, false, image);
 
 			graphics.drawString(_("Machine Gun"), x1, y += 20, false, image);
-			sprintf(string, "%d", game.bulletsFired[WP_MACHINEGUN]);
+			snprintf(string, sizeof string, "%d", game.bulletsFired[WP_MACHINEGUN]);
 			graphics.drawString(string, x2, y, false, image);
-			sprintf(string, "%d%%", game.getWeaponAccuracy(WP_MACHINEGUN));
+			snprintf(string, sizeof string, "%d%%", game.getWeaponAccuracy(WP_MACHINEGUN));
 			graphics.drawString(string, x3, y, false, image);
 
 			graphics.drawString(_("Laser Cannon"), x1, y += 20, false, image);
-			sprintf(string, "%d", game.bulletsFired[WP_LASER]);
+			snprintf(string, sizeof string, "%d", game.bulletsFired[WP_LASER]);
 			graphics.drawString(string, x2, y, false, image);
-			sprintf(string, "%d%%", game.getWeaponAccuracy(WP_LASER));
+			snprintf(string, sizeof string, "%d%%", game.getWeaponAccuracy(WP_LASER));
 			graphics.drawString(string, x3, y, false, image);
 			
 			graphics.drawString(_("Grenades"), x1, y += 20, false, image);
-			sprintf(string, "%d", game.bulletsFired[WP_GRENADES]);
+			snprintf(string, sizeof string, "%d", game.bulletsFired[WP_GRENADES]);
 			graphics.drawString(string, x2, y, false, image);
-			sprintf(string, "%d%%", game.getWeaponAccuracy(WP_GRENADES));
+			snprintf(string, sizeof string, "%d%%", game.getWeaponAccuracy(WP_GRENADES));
 			graphics.drawString(string, x3, y, false, image);
 
 			graphics.drawString(_("Spread Gun"), x1, y += 20, false, image);
-			sprintf(string, "%d", game.bulletsFired[WP_SPREAD]);
+			snprintf(string, sizeof string, "%d", game.bulletsFired[WP_SPREAD]);
 			graphics.drawString(string, x2, y, false, image);
-			sprintf(string, "%d%%", game.getWeaponAccuracy(WP_SPREAD));
+			snprintf(string, sizeof string, "%d%%", game.getWeaponAccuracy(WP_SPREAD));
 			graphics.drawString(string, x3, y, false, image);
 			
 			graphics.drawString(_("Total"), x1, y += 30, false, image);
-			sprintf(string, "%d", game.getTotalBulletsFired());
+			snprintf(string, sizeof string, "%d", game.getTotalBulletsFired());
 			graphics.drawString(string, x2, y, false, image);
-			sprintf(string, "%d%%", game.getTotalAccuracy());
+			snprintf(string, sizeof string, "%d%%", game.getTotalAccuracy());
 			graphics.drawString(string, x3, y, false, image);
 
-			sprintf(string, "%s - %s", _("Most Used Weapon"), _(weapon[game.getMostUsedWeapon()].name));
+			snprintf(string, sizeof string, "%s - %s", _("Most Used Weapon"), _(weapon[game.getMostUsedWeapon()].name));
 			graphics.drawString(string, 200, y += 50, true, image);
 
 			break;
@@ -244,11 +244,11 @@ void createObjectivesPanel(const char *levelName)
 	int x2 = 260;
 	int y = 15;
 	
-	sprintf(levelMIAKey, "%s MIAs", levelName);
+	snprintf(levelMIAKey, sizeof levelMIAKey, "%s MIAs", levelName);
 
 	graphics.setFontColor(0xff, 0xff, 0xff, 0x00, 0x00, 0x00);
 
-	sprintf(string, _("Information for %s"), _(levelName));
+	snprintf(string, sizeof string, _("Information for %s"), _(levelName));
 	graphics.drawString(string, 200, y, true, image);
 	y += 10;
 
@@ -266,7 +266,7 @@ void createObjectivesPanel(const char *levelName)
 				if (strcmp(data->value, "0 / 0"))
 				{
 					graphics.drawString(_("MIAs Rescued"), x1, y += 20, false, image);
-					sprintf(string, "%d / %d", data->current, data->target);
+					snprintf(string, sizeof string, "%d / %d", data->current, data->target);
 					(data->isComplete()) ? graphics.setFontColor(0x00, 0xff, 0x00, 0x00, 0x00, 0x00) : graphics.setFontColor(0xff, 0x00, 0x00, 0x00, 0x00, 0x00);
 					graphics.drawString(string, x2, y, false, image);
 				}
@@ -279,7 +279,7 @@ void createObjectivesPanel(const char *levelName)
 				}
 				else
 				{
-					strcpy(string, _(data->value));
+					strncpy(string, _(data->value), sizeof string);
 					
 					if (strlen(string) >= 25)
 					{
@@ -301,11 +301,11 @@ void createObjectivesPanel(const char *levelName)
 				
 				if (data->target == 1)
 				{
-					sprintf(string, "%s", (data->isComplete()) ? _("Completed") : _("Incomplete"));
+					snprintf(string, sizeof string, "%s", (data->isComplete()) ? _("Completed") : _("Incomplete"));
 				}
 				else
 				{
-					sprintf(string, "%d / %d", data->current, data->target);
+					snprintf(string, sizeof string, "%d / %d", data->current, data->target);
 				}
 				
 				(data->isComplete()) ? graphics.setFontColor(0x00, 0xff, 0x00, 0x00, 0x00, 0x00) : graphics.setFontColor(0xff, 0x00, 0x00, 0x00, 0x00, 0x00);
@@ -360,22 +360,22 @@ void createMIAPanel(int start, int max)
 				continue;
 			}
 
-			sprintf(name, "%s", data->value);
+			snprintf(name, sizeof name, "%s", data->value);
 			strtok(name, "_");
 
-			sprintf(string, "%s", strtok(NULL, "_"));
+			snprintf(string, sizeof string, "%s", strtok(NULL, "_"));
 			graphics.drawString(string, x1, y += 20, false, image);
 
 			graphics.drawString(_(data->key), x2, y, false, image);
 
 			if (data->isComplete())
 			{
-				sprintf(string, "%s", _("Found"));
+				snprintf(string, sizeof string, "%s", _("Found"));
 				graphics.setFontColor(0x00, 0xff, 0x00, 0x00, 0x00, 0x00);
 			}
 			else
 			{
-				sprintf(string, "%s", _("Missing"));
+				snprintf(string, sizeof string, "%s", _("Missing"));
 				graphics.setFontColor(0xff, 0x00, 0x00, 0x00, 0x00, 0x00);
 			}
 
@@ -455,7 +455,7 @@ int doHub()
 	Sprite *cursor = graphics.addSprite("Cursor");
 	for (int i = 0 ; i < 6 ; i++)
 	{
-		sprintf(string, "gfx/main/cursor%d.png", i + 1);
+		snprintf(string, sizeof string, "gfx/main/cursor%d.png", i + 1);
 		cursor->setFrame(i, graphics.loadImage(string), 10);
 	}
 
@@ -464,7 +464,7 @@ int doHub()
 	
 	for (int i = 0 ; i < 5 ; i++)
 	{
-		sprintf(string, "gfx/sprites/miaSignal%d.png", i + 1);
+		snprintf(string, sizeof string, "gfx/sprites/miaSignal%d.png", i + 1);
 		
 		newTarget->setFrame(i, graphics.loadImage(string, -60, 0, 0), 15);
 		visitedTarget->setFrame(i, graphics.loadImage(string, 0, 0, 0), 15);
@@ -473,7 +473,7 @@ int doHub()
 	Sprite *hubIcons = graphics.addSprite("HubIcons");
 	for (int i = 0 ; i < 6 ; i++)
 	{
-		sprintf(string, "gfx/main/hubIcon%d.png", i + 1);
+		snprintf(string, sizeof string, "gfx/main/hubIcon%d.png", i + 1);
 		hubIcons->setFrame(i, graphics.loadImage(string), 60);
 	}
 
@@ -545,8 +545,8 @@ int doHub()
 
 	int rtn = -1;
 	
-	strcpy(level, "@none@");
-	strcpy(game.stageName, "@none@");
+	strncpy(level, "@none@", sizeof level);
+	strncpy(game.stageName, "@none@", sizeof game.stageName);
 
 	bool showData = false;
 	bool showStats = false;
@@ -575,7 +575,7 @@ int doHub()
 	if ((numberOfHubs == 0) && (gameData.completedWorld))
 	{
 		game.setMapName("data/spaceStation");
-		strcpy(game.stageName, "Space Station");
+		strncpy(game.stageName, "Space Station", sizeof game.stageName);
 		createObjectivesPanel("Space Station");
 		showData = true;
 		showStats = showMIAs = false;
@@ -608,15 +608,15 @@ int doHub()
 		if (validStage)
 		{
 			graphics.drawRect(10, 400, 620, 20, graphics.black, graphics.white, graphics.screen);
-			sprintf(string, "%s", _("Selected Destination"));
-			sprintf(string, "%s : %s", string, _(game.stageName));
+			snprintf(string, sizeof string, "%s", _("Selected Destination"));
+			snprintf(string, sizeof string, "%s : %s", string, _(game.stageName));
 			graphics.drawString(string, 320, 409, true, graphics.screen);
 		}
 		
 		graphics.drawRect(10, 430, 620, 40, graphics.black, graphics.white, graphics.screen);
 
 		#if !USEPAK
-		sprintf(pos, "%.3d:%.3d", engine.getMouseX(), engine.getMouseY());
+		snprintf(pos, sizeof pos, "%.3d:%.3d", engine.getMouseX(), engine.getMouseY());
 		graphics.drawString(pos, 320, 15, true, graphics.screen);
 		#endif
 
diff --git a/src/info.cpp b/src/info.cpp
old mode 100755
new mode 100644
index 6945f46..8ddcc66
--- a/src/info.cpp
+++ b/src/info.cpp
@@ -138,7 +138,7 @@ void doStatusBar()
 			if (engine.messageTime == -1)
 			{
 				engine.messagePriority = -1;
-				strcpy(engine.message, "");
+				engine.message[0] = 0;
 			}
 	
 			graphics.setFontColor(0xff, 0xff, 0xff, 0x00, 0x00, 0x00);
@@ -161,12 +161,12 @@ void doStatusBar()
 		}
 	}
 
-	sprintf(string, "%s %s", _("Weapon:"), _(player.currentWeapon->name));
+	snprintf(string, sizeof string, "%s %s", _("Weapon:"), _(player.currentWeapon->name));
 	graphics.drawString(string, 630, 5, TXT_RIGHT, graphics.screen);
 	
 	if (game.skill == 3)
 	{
-		sprintf(string, _("Time Remaining: %.2d:%.2d"), map.remainingMinutes, map.remainingSeconds);
+		snprintf(string, sizeof string, _("Time Remaining: %.2d:%.2d"), map.remainingMinutes, map.remainingSeconds);
 		graphics.blit(graphics.infoBar, 0, 25, graphics.screen, false);
 		
 		if ((map.remainingMinutes > 0) || (map.remainingSeconds > 0))
@@ -209,31 +209,31 @@ void doPauseInfo()
 	graphics.fade(130);
 
 	char string[1024];
-	strcpy(string, "");
+	string[0] = 0;
 	
 	graphics.setFontColor(0xff, 0xff, 0xff, 0x00, 0x00, 0x00);
 
 	//#if !USEPAK
-	sprintf(string, _("Position = %d:%d"), (int)player.x, (int)player.y);
+	snprintf(string, sizeof string, _("Position = %d:%d"), (int)player.x, (int)player.y);
 	graphics.drawString(string, 5, 25, false, graphics.screen);
 	//#endif
 
 	graphics.drawString(_("*** PAUSED ***"), 320, y, TXT_CENTERED, graphics.screen);
 
 	graphics.drawString(_("MIAs in Area"), col1, y += 30, TXT_RIGHT, graphics.screen);
-	sprintf(string, "%d", map.totalMIAs - map.foundMIAs);
+	snprintf(string, sizeof string, "%d", map.totalMIAs - map.foundMIAs);
 	graphics.drawString(string, col2, y, TXT_LEFT, graphics.screen);
 
 	graphics.drawString(_("Enemies Defeated"), col1, y += 20, TXT_RIGHT, graphics.screen);
-	sprintf(string, "%d", game.currentMissionEnemiesDefeated);
+	snprintf(string, sizeof string, "%d", game.currentMissionEnemiesDefeated);
 	graphics.drawString(string, col2, y, TXT_LEFT, graphics.screen);
 
 	graphics.drawString(_("Items Collected"), col1, y += 20, TXT_RIGHT, graphics.screen);
-	sprintf(string, "%d / %d", map.foundItems, map.totalItems);
+	snprintf(string, sizeof string, "%d / %d", map.foundItems, map.totalItems);
 	graphics.drawString(string, col2, y, TXT_LEFT, graphics.screen);
 
 	graphics.drawString(_("Best Combo"), col1, y += 20, TXT_RIGHT, graphics.screen);
-	sprintf(string, _("%d Hits"), game.maxComboHits);
+	snprintf(string, sizeof string, _("%d Hits"), game.maxComboHits);
 	graphics.drawString(string, col2, y, TXT_LEFT, graphics.screen);
 
 	graphics.drawString(_("++ Inventory ++"), 320, y += 40, TXT_CENTERED, graphics.screen);
@@ -248,13 +248,13 @@ void doPauseInfo()
 	if (map.totalMIAs > 0)
 	{
 		graphics.setFontColor(0xff, 0xff, 0xff, 0x00, 0x00, 0x00);
-		sprintf(message, _("Rescue %d MIAs"), map.requiredMIAs);
+		snprintf(message, sizeof message, _("Rescue %d MIAs"), map.requiredMIAs);
 		graphics.drawString(message, col1, y, TXT_RIGHT, graphics.screen);
 
 		if (map.foundMIAs < map.requiredMIAs)
 		{
 			graphics.setFontColor(0xff, 0x00, 0x00, 0x00, 0x00, 0x00);
-			sprintf(message, "%d / %d", map.foundMIAs, map.requiredMIAs);
+			snprintf(message, sizeof message, "%d / %d", map.foundMIAs, map.requiredMIAs);
 			graphics.drawString(message, col2, y, TXT_LEFT, graphics.screen);
 		}
 		else
@@ -296,7 +296,7 @@ void doPauseInfo()
 			}
 			else
 			{
-				sprintf(message, "%d / %d", objective->currentValue, objective->targetValue);
+				snprintf(message, sizeof message, "%d / %d", objective->currentValue, objective->targetValue);
     			graphics.drawString(message, col2, y, TXT_LEFT, graphics.screen);
 			}
 
@@ -317,6 +317,6 @@ void doPauseInfo()
 
 	y += 10;
 
-	sprintf(string, "%s - %.2d:%.2d:%.2d", _("Mission Time"), game.currentMissionHours, game.currentMissionMinutes, game.currentMissionSeconds);
+	snprintf(string, sizeof string, "%s - %.2d:%.2d:%.2d", _("Mission Time"), game.currentMissionHours, game.currentMissionMinutes, game.currentMissionSeconds);
 	graphics.drawString(string, 320, 430, TXT_CENTERED, graphics.screen);
 }
diff --git a/src/init.cpp b/src/init.cpp
old mode 100755
new mode 100644
index cf555ca..f0a140c
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -103,16 +103,16 @@ void setupUserHomeDirectory()
 	debug(("User Home = %s\n", userHome));
 	
 	char dir[PATH_MAX];
-	strcpy(dir, "");
+	dir[0] = 0;
 
-	sprintf(dir, "%s/.parallelrealities", userHome);
+	snprintf(dir, sizeof dir, "%s/.parallelrealities", userHome);
 	if ((mkdir(dir, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH) != 0) && (errno != EEXIST))
 	{
 		printf("Couldn't create required directory '%s'", dir);
 		exit(1);
 	}
 
-	sprintf(dir, "%s/.parallelrealities/blobwars", userHome);
+	snprintf(dir, sizeof dir, "%s/.parallelrealities/blobwars", userHome);
 	if ((mkdir(dir, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH) != 0) && (errno != EEXIST))
 	{
 		printf("Couldn't create required directory '%s'", dir);
@@ -120,7 +120,7 @@ void setupUserHomeDirectory()
 	}
 
 	char gameSavePath[PATH_MAX];
-	sprintf(gameSavePath, "%s/.parallelrealities/blobwars/", userHome);
+	snprintf(gameSavePath, sizeof gameSavePath, "%s/.parallelrealities/blobwars/", userHome);
 	engine.setUserHome(gameSavePath);
 }
 #endif
@@ -133,7 +133,7 @@ bool loadConfig()
 
 	char configPath[PATH_MAX];
 
-	sprintf(configPath, "%sconfig", engine.userHomeDirectory);
+	snprintf(configPath, sizeof configPath, "%sconfig", engine.userHomeDirectory);
 
 	debug(("Loading Config from %s\n", configPath));
 
@@ -177,7 +177,7 @@ void saveConfig()
 {
 	char configPath[PATH_MAX];
 
-	sprintf(configPath, "%sconfig", engine.userHomeDirectory);
+	snprintf(configPath, sizeof configPath, "%sconfig", engine.userHomeDirectory);
 
 	FILE *fp = fopen(configPath, "wb");
 
@@ -203,14 +203,14 @@ int initMedalService(void *data)
 	SDL_mutexP(medalServer.lock);
 	
 	char connectMessage[1024];
-	sprintf(connectMessage, "Contacting Medal Server - %s:%d", MEDAL_SERVER_HOST, MEDAL_SERVER_PORT);
+	snprintf(connectMessage, sizeof connectMessage, "Contacting Medal Server - %s:%d", MEDAL_SERVER_HOST, MEDAL_SERVER_PORT);
 	
 	graphics.showMedalMessage(-1, connectMessage);
 	
 	char keyPath[PATH_MAX];
 	char privateKey[20];
 
-	sprintf(keyPath, "%smedalKey", engine.userHomeDirectory);
+	snprintf(keyPath, sizeof keyPath, "%smedalKey", engine.userHomeDirectory);
 	
 	debug(("Loading private key from %s\n", keyPath));
 	
@@ -337,7 +337,7 @@ void initSystem()
 	#if USEPAK
 			
 		char tempPath[PATH_MAX];
-		sprintf(tempPath, "%sfont.ttf", engine.userHomeDirectory);	
+		snprintf(tempPath, sizeof tempPath, "%sfont.ttf", engine.userHomeDirectory);	
 		remove(tempPath);
 		
 		SDL_Delay(1000); // wait one second, just to be sure!
@@ -432,7 +432,7 @@ void cleanup()
 	audio.destroy();
 
 	debug(("Removing Music...\n"));
-	sprintf(tempPath, "%smusic.mod", engine.userHomeDirectory);
+	snprintf(tempPath, sizeof tempPath, "%smusic.mod", engine.userHomeDirectory);
 	remove(tempPath);
 
 	debug(("Freeing Game Info...\n"));
@@ -454,7 +454,7 @@ void cleanup()
 	}
 
 	debug(("Removing Font File...\n"));
-	sprintf(tempPath, "%sfont.ttf", engine.userHomeDirectory);
+	snprintf(tempPath, sizeof tempPath, "%sfont.ttf", engine.userHomeDirectory);
 	remove(tempPath);
 	
 	if (SDL_NumJoysticks() > 0)
diff --git a/src/intro.cpp b/src/intro.cpp
old mode 100755
new mode 100644
diff --git a/src/items.cpp b/src/items.cpp
old mode 100755
new mode 100644
index 4db5fc8..67aae9e
--- a/src/items.cpp
+++ b/src/items.cpp
@@ -278,10 +278,10 @@ void pickUpItem(Entity *item)
 			case 'o':
 			case 'U':
 			case 'u':
-				sprintf(string, _("Picked up an %s"), item->name);
+				snprintf(string, sizeof string, _("Picked up an %s"), item->name);
 				break;
 			default:
-				sprintf(string, _("Picked up a %s"), item->name);
+				snprintf(string, sizeof string, _("Picked up a %s"), item->name);
 				break;
 		}
 
diff --git a/src/lineDefs.cpp b/src/lineDefs.cpp
old mode 100755
new mode 100644
diff --git a/src/loadSave.cpp b/src/loadSave.cpp
old mode 100755
new mode 100644
index cfb509d..7d2792c
--- a/src/loadSave.cpp
+++ b/src/loadSave.cpp
@@ -36,25 +36,25 @@ void initSaveSlots()
 	//READ SAVE GAME DATA
 	for (int i = 0 ; i < 5 ; i++)
 	{
-		sprintf(filename, "%ssave%d.dat", engine.userHomeDirectory, i);
+		snprintf(filename, sizeof filename, "%ssave%d.dat", engine.userHomeDirectory, i);
 
 		fp = fopen(filename, "rb");
 
 		if (!fp)
 		{
-			strcpy(string, "%.2d - %s");
-			sprintf(engine.saveSlot[i], string, (i + 1), _("Empty"));
+			strncpy(string, "%.2d - %s", sizeof string);
+			snprintf(engine.saveSlot[i], sizeof engine.saveSlot[i], string, (i + 1), _("Empty"));
 		}
 		else
 		{
 			if (fread(&tempGame, sizeof(Game), 1, fp) != 1)
 			{
-				strcpy(string, "%.2d - %s");
-				sprintf(engine.saveSlot[i], string, (i + 1), _("Corrupt Save Data"));
+				strncpy(string, "%.2d - %s", sizeof string);
+				snprintf(engine.saveSlot[i], sizeof engine.saveSlot[i], string, (i + 1), _("Corrupt Save Data"));
 			}
 			else
 			{
-				sprintf(engine.saveSlot[i], "%.2d - %s (%.2d:%.2d:%.2d)", (i + 1), _(tempGame.stageName), tempGame.totalHours, tempGame.totalMinutes, tempGame.totalSeconds);
+				snprintf(engine.saveSlot[i], sizeof engine.saveSlot[i], "%.2d - %s (%.2d:%.2d:%.2d)", (i + 1), _(tempGame.stageName), tempGame.totalHours, tempGame.totalMinutes, tempGame.totalSeconds);
 			}
 
 			if (stat(filename, &fileInfo) != -1)
@@ -94,7 +94,7 @@ bool loadGame(int slot)
 	
 	int sanity = 0;
 
-	sprintf(filename, "%ssave%d.dat", engine.userHomeDirectory, slot);
+	snprintf(filename, sizeof filename, "%ssave%d.dat", engine.userHomeDirectory, slot);
 
 	fp = fopen(filename, "rb");
 	
@@ -111,7 +111,7 @@ bool loadGame(int slot)
 	
 	fclose(fp);
 	
-	sprintf(filename, "%spersistant%d.dat", engine.userHomeDirectory, slot);
+	snprintf(filename, sizeof filename, "%spersistant%d.dat", engine.userHomeDirectory, slot);
 
 	fp = fopen(filename, "rb");
 	
@@ -163,7 +163,7 @@ bool loadGame(int slot)
 		fgets(line, 1024, fp);
 		
 		sscanf(line, "%[^\n\r]", string[0]);
-		strcpy(stageName, string[0]);
+		strncpy(stageName, string[0], sizeof stageName);
 		
 		if (strcmp(stageName, "@EOF@") == 0)
 		{
@@ -183,7 +183,7 @@ bool loadGame(int slot)
 			
 			fgets(line, 1024, fp);
 			
-			strcpy(persistData->data, line);
+			strncpy(persistData->data, line, sizeof persistData->data);
 			
 			//debug(("Read %d: %s", i, persistData->data));
 			
@@ -232,12 +232,12 @@ int confirmSave()
 	engine.setWidgetVariable("contno", &quitNo);
 	
 	char widgetName[10];
-	strcpy(widgetName, "");
+	widgetName[0] = 0;
 	
 	for (int i = 0 ; i < 5 ; i++)
 	{
-		sprintf(widgetName, "slot%d", i + 1);
-		strcpy(engine.getWidgetByName(widgetName)->label, engine.saveSlot[i]);
+		snprintf(widgetName, sizeof widgetName, "slot%d", i + 1);
+		strncpy(engine.getWidgetByName(widgetName)->label, engine.saveSlot[i], sizeof engine.getWidgetByName(widgetName)->label);
 	}
 	
 	engine.highlightWidget("slot1");
@@ -329,7 +329,7 @@ void saveGame()
 
 	graphics.setFontSize(1);
 	graphics.setFontColor(0xff, 0xff, 0xff, 0x00, 0x00, 0x00);
-	sprintf(message, _("Saving Game to Save Slot #%d. Please Wait..."), slot + 1);
+	snprintf(message, sizeof message, _("Saving Game to Save Slot #%d. Please Wait..."), slot + 1);
 	graphics.drawString(message, 320, 220, true, graphics.screen);
 	graphics.updateScreen();
 
@@ -337,7 +337,7 @@ void saveGame()
 
 	FILE *fp;
 
-	sprintf(filename, "%ssave%d.dat", engine.userHomeDirectory, slot);
+	snprintf(filename, sizeof filename, "%ssave%d.dat", engine.userHomeDirectory, slot);
 
 	fp = fopen(filename, "wb");
 	
@@ -350,7 +350,7 @@ void saveGame()
 	
 	fclose(fp);
 	
-	sprintf(filename, "%spersistant%d.dat", engine.userHomeDirectory, slot);
+	snprintf(filename, sizeof filename, "%spersistant%d.dat", engine.userHomeDirectory, slot);
 
 	fp = fopen(filename, "wt");
 	
diff --git a/src/main.cpp b/src/main.cpp
old mode 100755
new mode 100644
index 020724c..33838ac
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -126,8 +126,8 @@ int main(int argc, char *argv[])
 		else if (strcmp(argv[i], "-mono") == 0) engine.useAudio = 1;
 		else if (strcmp(argv[i], "-version") == 0) showVersion();
 		else if (strcmp(argv[i], "--help") == 0) showHelp();
-		else if (strcmp(argv[i], "-record") == 0) {recordMode = REPLAY_MODE::RECORD; strcpy(replayData.filename, argv[++i]);}
-		else if (strcmp(argv[i], "-playback") == 0) {recordMode = REPLAY_MODE::PLAYBACK; strcpy(replayData.filename, argv[++i]);}
+		else if (strcmp(argv[i], "-record") == 0) {recordMode = REPLAY_MODE::RECORD; strncpy(replayData.filename, argv[++i], sizeof replayData.filename);}
+		else if (strcmp(argv[i], "-playback") == 0) {recordMode = REPLAY_MODE::PLAYBACK; strncpy(replayData.filename, argv[++i], sizeof replayData.filename);}
 		else if (strcmp(argv[i], "-map") == 0) {game.setMapName(argv[++i]); requiredSection = SECTION_GAME;}
 		else if (strcmp(argv[i], "-listmaps") == 0) listMaps();
 		
@@ -148,7 +148,7 @@ int main(int argc, char *argv[])
 			
 		case REPLAY_MODE::RECORD:
 			requiredSection = SECTION_GAME;
-			strcpy(replayData.header.map, game.mapName);
+			strncpy(replayData.header.map, game.mapName, sizeof replayData.header.map);
 			replayData.header.skill = game.skill = 3;
 			replayData.setMode(REPLAY_MODE::RECORD);
 			break;
diff --git a/src/map.cpp b/src/map.cpp
old mode 100755
new mode 100644
index e7083c8..eb86f17
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -393,7 +393,7 @@ void showMap(int centerX, int centerY)
 	graphics.drawString(_("Enemies"), 430, 410, TXT_LEFT, graphics.screen);
 
 	graphics.setFontSize(1);
-	sprintf(string, "%s - %.2d:%.2d:%.2d", _("Mission Time"), game.currentMissionHours, game.currentMissionMinutes, game.currentMissionSeconds);
+	snprintf(string, sizeof string, "%s - %.2d:%.2d:%.2d", _("Mission Time"), game.currentMissionHours, game.currentMissionMinutes, game.currentMissionSeconds);
 	graphics.drawString(string, 320, 60, TXT_CENTERED, graphics.screen);
 	graphics.drawString(_("Press Button to Continue..."), 320, 450, TXT_CENTERED, graphics.screen);
 
diff --git a/src/mapData.cpp b/src/mapData.cpp
old mode 100755
new mode 100644
index 1ccef79..dfe8514
--- a/src/mapData.cpp
+++ b/src/mapData.cpp
@@ -364,7 +364,7 @@ void createPersistantMapData()
 	}
 	
 	char line[1024];
-	strcpy(line, "");
+	line[0] = 0;
 	
 	char skill;
 	
@@ -381,7 +381,7 @@ void createPersistantMapData()
 			break;
 	}
 	
-	sprintf(line, "%c START %d %d\n", skill, (int)game.checkPointX, (int)game.checkPointY);
+	snprintf(line, sizeof line, "%c START %d %d\n", skill, (int)game.checkPointX, (int)game.checkPointY);
 	persistant->addLine(line);
 
 	Entity *ent;
@@ -399,7 +399,7 @@ void createPersistantMapData()
 	while (ent->next != NULL)
 	{
 		ent = (Entity*)ent->next;
-		sprintf(line, "%c ENEMY \"%s\" %d %d\n", skill, ent->name, (int)ent->x, (int)ent->y);
+		snprintf(line, sizeof line, "%c ENEMY \"%s\" %d %d\n", skill, ent->name, (int)ent->x, (int)ent->y);
 		persistant->addLine(line);
 	}
 	
@@ -415,7 +415,7 @@ void createPersistantMapData()
 			continue;
 		}
 		
-		sprintf(line, "%c ITEM %d \"%s\" %d %d %s\n", skill, ent->id, ent->name, (int)ent->x, (int)ent->y, ent->sprite[0]->name);
+		snprintf(line, sizeof line, "%c ITEM %d \"%s\" %d %d %s\n", skill, ent->id, ent->name, (int)ent->x, (int)ent->y, ent->sprite[0]->name);
 		persistant->addLine(line);
 	}
 	
@@ -424,7 +424,7 @@ void createPersistantMapData()
 	while (ent->next != NULL)
 	{
 		ent = (Entity*)ent->next;
-		sprintf(line, "%c OBSTACLE \"%s\" %d %d %s\n", skill, ent->name, (int)ent->x, (int)ent->y, ent->sprite[0]->name);
+		snprintf(line, sizeof line, "%c OBSTACLE \"%s\" %d %d %s\n", skill, ent->name, (int)ent->x, (int)ent->y, ent->sprite[0]->name);
 		persistant->addLine(line);
 	}
 	
@@ -436,7 +436,7 @@ void createPersistantMapData()
 		define[0] = engine.getDefineOfValue("SWT_", swt->type);
 		define[1] = (char*)getActiveState(swt->activated);
 		
-		sprintf(line, "%c SWITCH \"%s\" %s \"%s\" \"%s\" %s %d %d %s\n", skill, swt->name, swt->linkName, swt->requiredObjectName, swt->activateMessage, define[0], (int)swt->x, (int)swt->y, define[1]);
+		snprintf(line, sizeof line, "%c SWITCH \"%s\" %s \"%s\" \"%s\" %s %d %d %s\n", skill, swt->name, swt->linkName, swt->requiredObjectName, swt->activateMessage, define[0], (int)swt->x, (int)swt->y, define[1]);
 		
 		persistant->addLine(line);
 	}
@@ -459,13 +459,13 @@ void createPersistantMapData()
 			}
 			
 			define[1] = (char*)getActiveState(train->active);
-			sprintf(line, "%c DOOR %s %s %d %d %d %d %s\n", skill, train->name, define[0], train->startX, train->startY, train->endX, train->endY, define[1]);
+			snprintf(line, sizeof line, "%c DOOR %s %s %d %d %d %d %s\n", skill, train->name, define[0], train->startX, train->startY, train->endX, train->endY, define[1]);
 		}
 		else
 		{
 			define[0] = engine.getDefineOfValue("TR_A", train->waitAtStart);
 			define[1] = (char*)getActiveState(train->active);
-			sprintf(line, "%c TRAIN %s %d %d %d %d %d %s %s\n", skill, train->name, train->startX, train->startY, train->endX, train->endY, train->getPause(), define[0], define[1]);
+			snprintf(line, sizeof line, "%c TRAIN %s %d %d %d %d %d %s %s\n", skill, train->name, train->startX, train->startY, train->endX, train->endY, train->getPause(), define[0], define[1]);
 		}
 				
 		persistant->addLine(line);
@@ -478,7 +478,7 @@ void createPersistantMapData()
 		trap = (Trap*)trap->next;
 		define[0] = engine.getDefineOfValue("TRAP_TYPE", trap->type);
 		define[1] = (char*)getActiveState(trap->active);
-		sprintf(line, "%c TRAP %s %s %d %d %d %d %d %d %d %d %s %s\n", skill, trap->name, define[0], (int)trap->damage, (int)trap->speed, (int)trap->startX, (int)trap->startY, (int)trap->endX, (int)trap->endY, (int)trap->waitTime[0], (int)trap->waitTime[1], trap->sprite->name, define[1]);
+		snprintf(line, sizeof line, "%c TRAP %s %s %d %d %d %d %d %d %d %d %s %s\n", skill, trap->name, define[0], (int)trap->damage, (int)trap->speed, (int)trap->startX, (int)trap->startY, (int)trap->endX, (int)trap->endY, (int)trap->waitTime[0], (int)trap->waitTime[1], trap->sprite->name, define[1]);
 		persistant->addLine(line);
 	}
 	
@@ -488,7 +488,7 @@ void createPersistantMapData()
 	{
 		teleporter = (Teleporter*)teleporter->next;
 		define[0] = (char*)getActiveState(teleporter->active);
-		sprintf(line, "%c TELEPORTER %s %d %d %d %d %s\n", skill, teleporter->name, (int)teleporter->x, (int)teleporter->y, (int)teleporter->destX, (int)teleporter->destY, define[0]);
+		snprintf(line, sizeof line, "%c TELEPORTER %s %d %d %d %d %s\n", skill, teleporter->name, (int)teleporter->x, (int)teleporter->y, (int)teleporter->destX, (int)teleporter->destY, define[0]);
 		persistant->addLine(line);
 	}
 	
@@ -498,7 +498,7 @@ void createPersistantMapData()
 	{
 		lineDef = (LineDef*)lineDef->next;
 		define[0] = (char*)getActiveState(lineDef->activated);
-		sprintf(line, "%c LINEDEF \"%s\" %s \"%s\" %d %d %d %d %s\n", skill, lineDef->name, lineDef->linkName, lineDef->activateMessage, (int)lineDef->x, (int)lineDef->y, (int)lineDef->width, (int)lineDef->height, define[0]);
+		snprintf(line, sizeof line, "%c LINEDEF \"%s\" %s \"%s\" %d %d %d %d %s\n", skill, lineDef->name, lineDef->linkName, lineDef->activateMessage, (int)lineDef->x, (int)lineDef->y, (int)lineDef->width, (int)lineDef->height, define[0]);
 		persistant->addLine(line);
 	}
 	
@@ -519,7 +519,7 @@ void createPersistantMapData()
 		}
 			
 		define[2] = (char*)getActiveState(spawnPoint->active);
-		sprintf(line, "%c SPAWNPOINT %s %d %d %s %s %d %d %s\n", skill, spawnPoint->name, (int)spawnPoint->x, (int)spawnPoint->y, define[0], define[1], (int)(spawnPoint->minInterval / 60), (int)(spawnPoint->maxInterval / 60), define[2]);
+		snprintf(line, sizeof line, "%c SPAWNPOINT %s %d %d %s %s %d %d %s\n", skill, spawnPoint->name, (int)spawnPoint->x, (int)spawnPoint->y, define[0], define[1], (int)(spawnPoint->minInterval / 60), (int)(spawnPoint->maxInterval / 60), define[2]);
 		persistant->addLine(line);
 	}
 	
@@ -527,14 +527,14 @@ void createPersistantMapData()
 	{
 		if (map.getSpawnableEnemy(i) != NULL)
 		{
-			sprintf(line, "%c SPAWNABLE_ENEMY \"%s\"\n", skill, map.getSpawnableEnemy(i));
+			snprintf(line, sizeof line, "%c SPAWNABLE_ENEMY \"%s\"\n", skill, map.getSpawnableEnemy(i));
 			persistant->addLine(line);
 		}
 	}
 	
 	if (map.waterLevel != -1)
 	{
-		sprintf(line, "%c WATERLEVEL %d\n", skill, (int)map.waterLevel);
+		snprintf(line, sizeof line, "%c WATERLEVEL %d\n", skill, (int)map.waterLevel);
 		persistant->addLine(line);
 	}
 	
diff --git a/src/mapEditor.cpp b/src/mapEditor.cpp
old mode 100755
new mode 100644
index 5810419..fb00004
--- a/src/mapEditor.cpp
+++ b/src/mapEditor.cpp
@@ -264,7 +264,7 @@ void collectMapData()
 		if (!strstr(string, " ENEMY \""))
 		{
 			str = new String;
-			strcpy(str->string, string);
+			strncpy(str->string, string, sizeof str->string);
 			stringTail->next = str;
 			stringTail = str;
 		}
@@ -617,11 +617,11 @@ int main(int argc, char *argv[])
 		if (mapY > MAPHEIGHT - 30) mapY = MAPHEIGHT - 30;
 
 		if (editing == 0)
-			sprintf(string, "Index : %d:%d ; Screen %d:%d ; Tile %d", mapX + x, mapY + y, (mapX + x) * BRICKSIZE, (mapY + y) * BRICKSIZE, currentBlock);
+			snprintf(string, sizeof string, "Index : %d:%d ; Screen %d:%d ; Tile %d", mapX + x, mapY + y, (mapX + x) * BRICKSIZE, (mapY + y) * BRICKSIZE, currentBlock);
 		else if (editing == 1)
-			sprintf(string, "Index : %d:%d ; Screen %d:%d ; %s", mapX + x, mapY + y, (mapX + x) * BRICKSIZE, (mapY + y) * BRICKSIZE, defEnemy[currentMonster].name);
+			snprintf(string, sizeof string, "Index : %d:%d ; Screen %d:%d ; %s", mapX + x, mapY + y, (mapX + x) * BRICKSIZE, (mapY + y) * BRICKSIZE, defEnemy[currentMonster].name);
 		else if (editing == 2)
-			sprintf(string, "Index : %d:%d ; Screen %d:%d ; %s", mapX + x, mapY + y, (mapX + x) * BRICKSIZE, (mapY + y) * BRICKSIZE, defItem[currentItem].name);
+			snprintf(string, sizeof string, "Index : %d:%d ; Screen %d:%d ; %s", mapX + x, mapY + y, (mapX + x) * BRICKSIZE, (mapY + y) * BRICKSIZE, defItem[currentItem].name);
 
 		r.x = 0;
 		r.w = 640;
diff --git a/src/mias.cpp b/src/mias.cpp
old mode 100755
new mode 100644
index 5936f9b..e8df50d
--- a/src/mias.cpp
+++ b/src/mias.cpp
@@ -22,20 +22,20 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 void initMIAPhrases()
 {
-	strcpy(mia_scared[0], "help me...");
-	strcpy(mia_scared[1], "i don't wanna die...");
-	strcpy(mia_scared[2], "please... someone help...");
-	strcpy(mia_scared[3], "i... i'm scared...");
-	strcpy(mia_scared[4], "i wanna go home...");
-	strcpy(mia_scared[5], "what was that?!");
-	strcpy(mia_scared[6], "i don't like it here...");
+	strncpy(mia_scared[0], "help me...", sizeof mia_scared[0]);
+	strncpy(mia_scared[1], "i don't wanna die...", sizeof mia_scared[1]);
+	strncpy(mia_scared[2], "please... someone help...", sizeof mia_scared[2]);
+	strncpy(mia_scared[3], "i... i'm scared...", sizeof mia_scared[3]);
+	strncpy(mia_scared[4], "i wanna go home...", sizeof mia_scared[4]);
+	strncpy(mia_scared[5], "what was that?!", sizeof mia_scared[5]);
+	strncpy(mia_scared[6], "i don't like it here...", sizeof mia_scared[6]);
 }
 
 void addMIA(const char *name, int x, int y, int type)
 {
 	Entity *mia = new Entity();
 
-	strcpy(mia->name, name);
+	strncpy(mia->name, name, sizeof mia->name);
 	mia->id = type;
 	mia->baseThink = 60;
 	mia->health = 180;
@@ -140,17 +140,17 @@ void doMIAs()
 
 					if ((map.foundMIAs == (map.requiredMIAs / 2)) || (game.skill == 0))
 					{
-						sprintf(message, _("Rescued %s - Checkpoint Reached!"), mia->name);
+						snprintf(message, sizeof message, _("Rescued %s - Checkpoint Reached!"), mia->name);
 						game.setObjectiveCheckPoint();
 					}
 					else
 					{
-						sprintf(message, _("Rescued %s!"), mia->name);
+						snprintf(message, sizeof message, _("Rescued %s!"), mia->name);
 					}
 
 					if (map.foundMIAs == map.requiredMIAs)
 					{
-						sprintf(message, _("Rescue %d MIAs - Objective Complete - Checkpoint Reached!"), map.requiredMIAs);
+						snprintf(message, sizeof message, _("Rescue %d MIAs - Objective Complete - Checkpoint Reached!"), map.requiredMIAs);
 						game.setObjectiveCheckPoint();
 					}
 					
diff --git a/src/mission.cpp b/src/mission.cpp
old mode 100755
new mode 100644
index 4d6e989..d562df8
--- a/src/mission.cpp
+++ b/src/mission.cpp
@@ -98,7 +98,7 @@ void processPostMissionData()
 		if (mia->health > 0)
 			miaFound = false;
 
-		sprintf(string, "MIA_%s", mia->name);
+		snprintf(string, sizeof string, "MIA_%s", mia->name);
 		
 		if (miaFound)
 		{
@@ -127,7 +127,7 @@ void clearAllMissionData()
 {
 	char levelMIAKey[100];
 	
-	sprintf(levelMIAKey, "%s MIAs", game.stageName);
+	snprintf(levelMIAKey, sizeof levelMIAKey, "%s MIAs", game.stageName);
 	
 	Data *data = (Data*)gameData.dataList.getHead();
 	Data *previous = data;
@@ -231,13 +231,13 @@ void showMissionClear()
 	if (map.totalMIAs > 0)
 	{
 		graphics.setFontColor(0xff, 0xff, 0xff, 0x00, 0x00, 0x00);
-		sprintf(message, _("Rescue %d MIAs"), map.requiredMIAs);
+		snprintf(message, sizeof message, _("Rescue %d MIAs"), map.requiredMIAs);
 		graphics.drawString(message, col1, y, TXT_RIGHT, graphics.background);
 
 		if (map.foundMIAs < map.requiredMIAs)
 		{
 			graphics.setFontColor(0xff, 0x00, 0x00, 0x00, 0x00, 0x00);
-			sprintf(message, "%d / %d", map.foundMIAs, map.requiredMIAs);
+			snprintf(message, sizeof message, "%d / %d", map.foundMIAs, map.requiredMIAs);
 			graphics.drawString(message, col2, y, TXT_LEFT, graphics.background);
 		}
 		else
@@ -278,7 +278,7 @@ void showMissionClear()
 			else
 			{
 				graphics.setFontColor(0xff, 0x00, 0x00, 0x00, 0x00, 0x00);
-				sprintf(message, "%d / %d", objective->currentValue, objective->targetValue);
+				snprintf(message, sizeof message, "%d / %d", objective->currentValue, objective->targetValue);
 				graphics.drawString(message, col2, y, TXT_LEFT, graphics.background);
 			}
 		}
@@ -365,7 +365,7 @@ void showMissionClear()
 			}
 		}
 
-		sprintf(message, "%s - %.2d:%.2d:%.2d", _("Mission Time"), game.currentMissionHours, game.currentMissionMinutes, game.currentMissionSeconds);
+		snprintf(message, sizeof message, "%s - %.2d:%.2d:%.2d", _("Mission Time"), game.currentMissionHours, game.currentMissionMinutes, game.currentMissionSeconds);
 		graphics.drawString(message, 320, 420, true, graphics.screen);
 
 		engine.delay(frameLimit);
diff --git a/src/objectives.cpp b/src/objectives.cpp
old mode 100755
new mode 100644
index edc5ad4..f9e92f7
--- a/src/objectives.cpp
+++ b/src/objectives.cpp
@@ -269,24 +269,24 @@ void checkObjectives(const char *name, bool alwaysInform)
 				{
 					if (!map.isBossMission)
 					{
-						sprintf(message, _("%s - Objective Completed - Check Point Reached!"), _(objective->description));
+						snprintf(message, sizeof message, _("%s - Objective Completed - Check Point Reached!"), _(objective->description));
 						game.setObjectiveCheckPoint();
 					}
 					else
 					{
-						sprintf(message, _("%s - Objective Completed"), _(objective->description));
+						snprintf(message, sizeof message, _("%s - Objective Completed"), _(objective->description));
 					}
 
 					if (strcmp(objective->description, "Get the Aqua Lung") == 0)
 					{
-						sprintf(message, "Got the Aqua Lung! You can now swim forever!");
+						snprintf(message, sizeof message, "Got the Aqua Lung! You can now swim forever!");
 						game.hasAquaLung = true;
 						presentPlayerMedal("Aqua_Lung");
 					}
 
 					if (strcmp(objective->description, "Get the Jetpack") == 0)
 					{
-						sprintf(message, "Got the Jetpack! Press SPACE to Activate!");
+						snprintf(message, sizeof message, "Got the Jetpack! Press SPACE to Activate!");
 						game.hasJetPack = true;
 						presentPlayerMedal("Jetpack");
 					}
@@ -303,13 +303,13 @@ void checkObjectives(const char *name, bool alwaysInform)
 						switch (Math::prand() % 3)
 						{
 							case 0:
-								sprintf(message, _("%s - %d more to go..."), _(objective->description), requiredValue);
+								snprintf(message, sizeof message, _("%s - %d more to go..."), _(objective->description), requiredValue);
 								break;
 							case 1:
-								sprintf(message, _("%s - need %d more"), _(objective->description), requiredValue);
+								snprintf(message, sizeof message, _("%s - need %d more"), _(objective->description), requiredValue);
 								break;
 							case 2:
-								sprintf(message, _("%s - %d of %d"), _(objective->description), objective->currentValue, objective->targetValue);
+								snprintf(message, sizeof message, _("%s - %d of %d"), _(objective->description), objective->currentValue, objective->targetValue);
 								break;
 						}
 						
diff --git a/src/obstacles.cpp b/src/obstacles.cpp
old mode 100755
new mode 100644
diff --git a/src/options.cpp b/src/options.cpp
old mode 100755
new mode 100644
diff --git a/src/pak.cpp b/src/pak.cpp
old mode 100755
new mode 100644
index 36d5a19..ee254c7
--- a/src/pak.cpp
+++ b/src/pak.cpp
@@ -55,7 +55,7 @@ void countFiles(const char *dirName)
 			continue;
 		}
 
-		sprintf(filename, "%s/%s", dirName, dfile->d_name);
+		snprintf(filename, sizeof filename, "%s/%s", dirName, dfile->d_name);
 		
 		if (strlen(filename) > PAK_MAX_FILENAME - 1)
 		{
@@ -108,7 +108,7 @@ void recurseDirectory(const char *dirName)
 			continue;
 		}
 
-		sprintf(filename, "%s/%s", dirName, dfile->d_name);
+		snprintf(filename, sizeof filename, "%s/%s", dirName, dfile->d_name);
 
 		dirp2 = opendir(filename);
 
diff --git a/src/particles.cpp b/src/particles.cpp
old mode 100755
new mode 100644
diff --git a/src/player.cpp b/src/player.cpp
old mode 100755
new mode 100644
index 4ce9892..6b7eb29
--- a/src/player.cpp
+++ b/src/player.cpp
@@ -66,7 +66,7 @@ void presentPlayerMedal(const char *tname)
 	// Copy the input, so that threading
 	// doesn't trip us up!
 	char *data = new char[128];
-	strcpy(data, tname);
+	strncpy(data, tname, sizeof data);
 	
 	SDL_Thread *thread = SDL_CreateThread(medalWorker, (void*)data);
 	
diff --git a/src/resources.cpp b/src/resources.cpp
old mode 100755
new mode 100644
diff --git a/src/spawnPoints.cpp b/src/spawnPoints.cpp
old mode 100755
new mode 100644
diff --git a/src/switches.cpp b/src/switches.cpp
old mode 100755
new mode 100644
index a7543dd..96d74d9
--- a/src/switches.cpp
+++ b/src/switches.cpp
@@ -65,15 +65,15 @@ void checkSwitchContact(Entity *ent)
 					
 					if (swt->type == SWT_PRESSURE)
 					{
-						strcpy(swt->requiredObjectName, "@none@");
+						strncpy(swt->requiredObjectName, "@none@", sizeof swt->requiredObjectName);
 					}
 					
 					checkObjectives(swt->name, true);
-					strcpy(swt->name, "Switch");
+					strncpy(swt->name, "Switch", sizeof swt->name);
 				}
 				else
 				{
-					sprintf(message, "%s required", swt->requiredObjectName);
+					snprintf(message, sizeof message, "%s required", swt->requiredObjectName);
 					engine.setInfoMessage(message, 1, INFO_HINT);
 				}
 			}
diff --git a/src/tankBoss.cpp b/src/tankBoss.cpp
old mode 100755
new mode 100644
index 05120f9..6db897f
--- a/src/tankBoss.cpp
+++ b/src/tankBoss.cpp
@@ -382,7 +382,7 @@ void tankBossMGInit()
 	debug(("tankBossMGInit\n"));
 	
 	map.boss[0] = new Boss();
-	strcpy(map.boss[0]->name, "BioMech Tank V1.1");
+	strncpy(map.boss[0]->name, "BioMech Tank V1.1", sizeof map.boss[0]->name);
 	map.boss[0]->health = 65 * game.skill;
 	map.boss[0]->maxHealth = 65 * game.skill;
 	map.boss[0]->setSprites(graphics.getSprite("BlobTankCannonRight", true), graphics.getSprite("BlobTankCannonLeft", true), graphics.getSprite("BlobTankCannonLeft", true));
@@ -604,7 +604,7 @@ void tankBossGLInit()
 	debug(("tankBossGLInit\n"));
 	
 	map.boss[1] = new Boss();
-	strcpy(map.boss[1]->name, "BioMech Tank V2.6");
+	strncpy(map.boss[1]->name, "BioMech Tank V2.6", sizeof map.boss[1]->name);
 	map.boss[1]->health = 65 * game.skill;
 	map.boss[1]->maxHealth = 65 * game.skill;
 	map.boss[1]->setSprites(graphics.getSprite("BlobTankGrenadeRight", true), graphics.getSprite("BlobTankGrenadeLeft", true), graphics.getSprite("BlobTankGrenadeLeft", true));
diff --git a/src/teleporters.cpp b/src/teleporters.cpp
old mode 100755
new mode 100644
diff --git a/src/title.cpp b/src/title.cpp
old mode 100755
new mode 100644
index 777b142..29dcd86
--- a/src/title.cpp
+++ b/src/title.cpp
@@ -111,20 +111,20 @@ void showTitleWidgets()
 void setupSaveWidgets()
 {
 	char widgetName[10];
-	strcpy(widgetName, "");
+	widgetName[0] = 0;
 	
 	for (int i = 0 ; i < 5 ; i++)
 	{
-		sprintf(widgetName, "save%d", i + 1);
-		strcpy(engine.getWidgetByName(widgetName)->label, engine.saveSlot[i]);
+		snprintf(widgetName, sizeof widgetName, "save%d", i + 1);
+		strncpy(engine.getWidgetByName(widgetName)->label, engine.saveSlot[i], sizeof engine.getWidgetByName(widgetName)->label);
 		
 		if ((strstr(engine.saveSlot[i], _("Empty"))) || (strstr(engine.saveSlot[i], _("Corrupt"))))
 		{
 			engine.enableWidget(widgetName, false);
 		}
 		
-		sprintf(widgetName, "slot%d", i + 1);
-		strcpy(engine.getWidgetByName(widgetName)->label, engine.saveSlot[i]);
+		snprintf(widgetName, sizeof widgetName, "slot%d", i + 1);
+		strncpy(engine.getWidgetByName(widgetName)->label, engine.saveSlot[i], sizeof engine.getWidgetByName(widgetName)->label);
 	}
 }
 
@@ -143,7 +143,7 @@ void loadTitleWidgets()
 	setupSaveWidgets();
 	
 	Widget *widget = engine.getWidgetByName("labelManual");
-	strcpy(widget->label, GAMEPLAYMANUAL);
+	strncpy(widget->label, GAMEPLAYMANUAL, sizeof widget->label);
 
 	showTitleWidgets();
 }
@@ -192,7 +192,7 @@ int title()
 	char v[50];
 	#define STRINGIFY_VALUE(x) STRINGIFY(x)
 	#define STRINGIFY(x) #x
-	sprintf(v, _("Version %s"), STRINGIFY_VALUE(VERSION));
+	snprintf(v, sizeof v, _("Version %s"), STRINGIFY_VALUE(VERSION));
 	SDL_Surface *version = graphics.quickSprite("Version", graphics.getString(v, true));
 
 	SDL_SetAlpha(title, SDL_SRCALPHA|SDL_RLEACCEL, 0);
diff --git a/src/trains.cpp b/src/trains.cpp
old mode 100755
new mode 100644
diff --git a/src/traps.cpp b/src/traps.cpp
old mode 100755
new mode 100644
diff --git a/src/triggers.cpp b/src/triggers.cpp
old mode 100755
new mode 100644
diff --git a/src/weapons.cpp b/src/weapons.cpp
old mode 100755
new mode 100644
diff --git a/src/widgets.cpp b/src/widgets.cpp
old mode 100755
new mode 100644
index eeeb841..5591204
--- a/src/widgets.cpp
+++ b/src/widgets.cpp
@@ -126,21 +126,21 @@ void drawJoypadButtonOption(Widget *widget)
 	int x = 300;
 	
 	char text[25];
-	strcpy(text, "");
+	text[0] = 0;
 	
 	// joysticks have a button 0 so we can't
 	// do the same thing as the keyboard(!)
 	if (*widget->value <= -1000)
 	{
-		sprintf(text, "...");
+		snprintf(text, sizeof text, "...");
 	}
 	else if (*widget->value == -2)
 	{
-		sprintf(text, "N/A");
+		snprintf(text, sizeof text, "N/A");
 	}
 	else
 	{
-		sprintf(text, "Button #%d", *widget->value);
+		snprintf(text, sizeof text, "Button #%d", *widget->value);
 	}
 	
 	graphics.drawString(text, x, widget->y, TXT_LEFT, graphics.screen);