Index: src/ch/AppHelper.cpp
===================================================================
diff -u -rd5c3edd0d167db9b5d47d04248820fda49499a5e -raa6bff57279b9f9cfc276e9adab2763e2900878d
--- src/ch/AppHelper.cpp	(.../AppHelper.cpp)	(revision d5c3edd0d167db9b5d47d04248820fda49499a5e)
+++ src/ch/AppHelper.cpp	(.../AppHelper.cpp)	(revision aa6bff57279b9f9cfc276e9adab2763e2900878d)
@@ -151,56 +151,64 @@
 	if (_tcsnicmp(pszString, _T("<PROGRAM>"), 9) == 0)
 	{
 		// get windows path
-		_tcscpy(szStr, m_pszProgramPath ? m_pszProgramPath : _t(""));
-		_tcscat(szStr, pszString+9);
+		_tcsncpy(szStr, m_pszProgramPath ? m_pszProgramPath : _t(""), _MAX_PATH);
+		szStr[_MAX_PATH - 1] = _T('\0');
+		_tcsncat(szStr, pszString+9, _MAX_PATH - _tcslen(szStr));
+		szStr[_MAX_PATH - 1] = _T('\0');
 	}
 	else if (_tcsnicmp(pszString, _T("<WINDOWS>"), 9) == 0)
 	{
 		// get windows path
 		UINT uiSize=GetWindowsDirectory(szStr, _MAX_PATH);
 		if (szStr[uiSize-1] == _T('\\'))
 			szStr[uiSize-1]=_T('\0');
-		_tcscat(szStr, pszString+9);
+		_tcsncat(szStr, pszString+9, _MAX_PATH - uiSize);
+		szStr[_MAX_PATH - 1] = _T('\0');
 	}
 	else if (_tcsnicmp(pszString, _T("<TEMP>"), 6) == 0)	// temp dir
 	{
 		// get windows path
 		UINT uiSize=GetTempPath(_MAX_PATH, szStr);
 		if (szStr[uiSize-1] == _T('\\'))
 			szStr[uiSize-1]=_T('\0');
-		_tcscat(szStr, pszString+6);
+		_tcsncat(szStr, pszString+6, _MAX_PATH - uiSize);
+		szStr[_MAX_PATH - 1] = _T('\0');
 	}
 	else if (_tcsnicmp(pszString, _T("<SYSTEM>"), 8) == 0)	// system
 	{
 		// get windows path
 		UINT uiSize=GetSystemDirectory(szStr, _MAX_PATH);
 		if (szStr[uiSize-1] == _T('\\'))
 			szStr[uiSize-1]=_T('\0');
-		_tcscat(szStr, pszString+8);
+		_tcsncat(szStr, pszString+8, _MAX_PATH - uiSize);
+		szStr[_MAX_PATH - 1] = _T('\0');
 	}
 	else if (_tcsnicmp(pszString, _T("<APPDATA>"), 9) == 0)	// app data
 	{
 		// get windows path
 		UINT uiSize=GetFolderLocation(CSIDL_LOCAL_APPDATA, szStr);
 		if (szStr[uiSize-1] == _T('\\'))
 			szStr[uiSize-1]=_T('\0');
-		_tcscat(szStr, pszString+9);
+		_tcsncat(szStr, pszString+9, _MAX_PATH - uiSize);
+		szStr[_MAX_PATH - 1] = _T('\0');
 	}
 	else if (_tcsnicmp(pszString, _T("<DESKTOP>"), 9) == 0)	// desktop
 	{
 		// get windows path
 		UINT uiSize=GetFolderLocation(CSIDL_DESKTOPDIRECTORY, szStr);
 		if (szStr[uiSize-1] == _T('\\'))
 			szStr[uiSize-1]=_T('\0');
-		_tcscat(szStr, pszString+9);
+		_tcsncat(szStr, pszString+9, _MAX_PATH - uiSize);
+		szStr[_MAX_PATH - 1] = _T('\0');
 	}
 	else if (_tcsnicmp(pszString, _T("<PERSONAL>"), 10) == 0)	// personal...
 	{
 		// get windows path
 		UINT uiSize=GetFolderLocation(CSIDL_PERSONAL, szStr);
 		if (szStr[uiSize-1] == _T('\\'))
 			szStr[uiSize-1]=_T('\0');
-		_tcscat(szStr, pszString+10);
+		_tcsncat(szStr, pszString+10, _MAX_PATH - uiSize);
+		szStr[_MAX_PATH - 1] = _T('\0');
 	}
 
 	// copy to src string