View Issue Details

IDProjectCategoryView StatusLast Update
0002053FSSCPFREDpublic2010-11-12 12:18
ReporterFUBAR-BDHR Assigned ToFUBAR-BDHR  
PrioritynormalSeverityfeatureReproducibilityalways
Status resolvedResolutionfixed 
Product Version3.6.11 
Fixed in Version3.6.12 
Summary0002053: FRED allows the use of IFF types as ship and wing names
DescriptionThere is no check for naming a ship or wing "Friendly" or any other IFF. This could cause problems for sexps that allow an IFF as an argument.
TagsNo tags attached.

Activities

2009-11-30 10:23

 

name_checks.patch (6,762 bytes)   
Index: fred2/shipeditordlg.cpp
===================================================================
--- fred2/shipeditordlg.cpp	(revision 5691)
+++ fred2/shipeditordlg.cpp	(working copy)
@@ -1004,6 +1004,7 @@
 	char *str, old_name[255];
 	object *ptr;
 	int i, z, wing;
+	size_t t;
 	CSingleLock sync(&CS_cur_object_index), sync2(&CS_update);
 
 	nprintf(("Fred routing", "Ship dialog save\n"));
@@ -1069,7 +1070,39 @@
 				UpdateData(FALSE);
 			}
 
-		for (i=0; i<MAX_WAYPOINT_LISTS; i++)
+		for (i=0; i<Num_iffs; i++)
+			if (!stricmp(m_ship_name, Iff_info[i].iff_name)) {
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This ship name is already being used by a team.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+				m_ship_name = _T(Wings[cur_wing].name);
+				UpdateData(FALSE);
+			}
+
+			for ( t=0; t < Ai_tp_list.size(); t++)
+			if (!stricmp(m_ship_name, Ai_tp_list[t].name)) {
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This ship name is already being used by a target priority group.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+				m_ship_name = _T(Ships[single_ship].ship_name);
+				UpdateData(FALSE);
+			}
+
+			for (i=0; i<MAX_WAYPOINT_LISTS; i++)
 			if (Waypoint_lists[i].count && !stricmp(Waypoint_lists[i].name, m_ship_name)) {
 				if (bypass_errors)
 					return 0;
Index: fred2/waypointpathdlg.cpp
===================================================================
--- fred2/waypointpathdlg.cpp	(revision 5691)
+++ fred2/waypointpathdlg.cpp	(working copy)
@@ -21,6 +21,7 @@
 #include "ai/aigoals.h"
 #include "starfield/starfield.h"
 #include "jumpnode/jumpnode.h"
+#include "iff_defs/iff_defs.h"
 
 #define ID_JUMP_NODE_MENU	8000
 #define ID_WAYPOINT_MENU	9000
@@ -147,6 +148,7 @@
 	char *str, old_name[255];
 	int i, z;
 	object *ptr;
+	size_t t;
 
 	if (!GetSafeHwnd())
 		return 0;
@@ -178,7 +180,7 @@
 
 		ptr = GET_FIRST(&obj_used_list);
 		while (ptr != END_OF_LIST(&obj_used_list)) {
-			if (ptr->type == OBJ_SHIP) {
+			if ((ptr->type == OBJ_SHIP) || (ptr->type == OBJ_START)) {
 				if (!stricmp(m_name, Ships[ptr->instance].ship_name)) {
 					if (bypass_errors)
 						return 1;
@@ -198,6 +200,38 @@
 			ptr = GET_NEXT(ptr);
 		}
 
+		for (i=0; i<Num_iffs; i++)
+			if (!stricmp(m_name, Iff_info[i].iff_name)) {
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This waypoint path name is already being used by a team.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+				m_name = _T(Waypoint_lists[cur_waypoint_list].name);
+				UpdateData(FALSE);
+			}
+
+		for ( t=0; t < Ai_tp_list.size(); t++)
+			if (!stricmp(m_name, Ai_tp_list[t].name)) {
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This waypoint path name is already being used by a target priority group.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+				m_name = _T(Waypoint_lists[cur_waypoint_list].name);
+				UpdateData(FALSE);
+			}
+
 		for (i=0; i<MAX_WAYPOINT_LISTS; i++)
 		{
 			if (Waypoint_lists[i].count && !stricmp(Waypoint_lists[i].name, m_name) && (i != cur_waypoint_list)) {
@@ -265,7 +299,7 @@
 
 		ptr = GET_FIRST(&obj_used_list);
 		while (ptr != END_OF_LIST(&obj_used_list)) {
-			if (ptr->type == OBJ_SHIP) {
+			if ((ptr->type == OBJ_SHIP) || (ptr->type == OBJ_START)) {
 				if (!stricmp(m_name, Ships[ptr->instance].ship_name)) {
 					if (bypass_errors)
 						return 1;
@@ -285,6 +319,38 @@
 			ptr = GET_NEXT(ptr);
 		}
 
+		for (i=0; i<Num_iffs; i++)
+			if (!stricmp(m_name, Iff_info[i].iff_name)) {
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This jump node name is already being used by a team.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+					m_name = _T(jnp->get_name_ptr());
+				UpdateData(FALSE);
+			}
+
+		for ( t=0; t < Ai_tp_list.size(); t++)
+			if (!stricmp(m_name, Ai_tp_list[t].name)) {
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This jump node name is already being used by a target priority group.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+					m_name = _T(jnp->get_name_ptr());
+				UpdateData(FALSE);
+			}
+
 		for (i=0; i<MAX_WAYPOINT_LISTS; i++)
 		{
 			if (Waypoint_lists[i].count && !stricmp(Waypoint_lists[i].name, m_name)) {
Index: fred2/wing_editor.cpp
===================================================================
--- fred2/wing_editor.cpp	(revision 5691)
+++ fred2/wing_editor.cpp	(working copy)
@@ -22,6 +22,7 @@
 #include "jumpnode/jumpnode.h"
 #include "cfile/cfile.h"
 #include "restrictpaths.h"
+#include "iff_defs/iff_defs.h"
 
 #define ID_WING_MENU 9000
 
@@ -538,6 +539,7 @@
 {
 	char *str, old_name[255], buf[512];
 	int i, z;
+	size_t t;
 	object *ptr;
 
 	nprintf(("Fred routing", "Wing dialog save\n"));
@@ -569,7 +571,7 @@
 
 		ptr = GET_FIRST(&obj_used_list);
 		while (ptr != END_OF_LIST(&obj_used_list)) {
-			if (ptr->type == OBJ_SHIP) {
+			if ((ptr->type == OBJ_SHIP) || (ptr->type == OBJ_START)) {
 				if (!stricmp(m_wing_name, Ships[ptr->instance].ship_name)) {
 					if (bypass_errors)
 						return 1;
@@ -589,6 +591,38 @@
 			ptr = GET_NEXT(ptr);
 		}
 
+		for (i=0; i<Num_iffs; i++)
+			if (!stricmp(m_wing_name, Iff_info[i].iff_name)) {
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This wing name is already being used by a team.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+				m_wing_name = _T(Wings[cur_wing].name);
+				UpdateData(FALSE);
+			}
+
+			for ( t=0; t < Ai_tp_list.size(); t++)
+			if (!stricmp(m_wing_name, Ai_tp_list[t].name)) {
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This wing name is already being used by a target priority group.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+				m_wing_name = _T(Wings[cur_wing].name);
+				UpdateData(FALSE);
+			}
+
 		for (i=0; i<MAX_WAYPOINT_LISTS; i++)
 			if (Waypoint_lists[i].count && !stricmp(Waypoint_lists[i].name, m_wing_name)) {
 				if (bypass_errors)
name_checks.patch (6,762 bytes)   

FUBAR-BDHR

2009-11-30 10:27

developer   ~0011356

Attached patch that checks ship, wing, waypoint, and jump node names with both IFF names and target priority groups.

Also found that there while those editors checked ship names they did not check player starts. Added a check for that as well.


One other thing I noticed is that there is no check when the objects are actually created only if they are edited. Mission save or error check catches it but it's not a pretty sight on some of the checks.

2009-12-01 04:19

 

name_checks2.patch (11,752 bytes)   
Index: fred2/createwingdlg.cpp
===================================================================
--- fred2/createwingdlg.cpp	(revision 5691)
+++ fred2/createwingdlg.cpp	(working copy)
@@ -17,6 +17,7 @@
 #include "object/waypoint.h"
 #include "globalincs/linklist.h"
 #include "parse/parselo.h"
+#include "iff_defs/iff_defs.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -56,10 +57,11 @@
 
 void create_wing_dlg::OnOK()
 {
-	CString msg;
+	CString msg, lft;
 	int i;
 	object *ptr;
-
+	size_t t;
+	
 	UpdateData(TRUE);
 	UpdateData(TRUE);
 	m_name = drop_white_space((char *)(LPCSTR) m_name);
@@ -77,7 +79,7 @@
 
 	ptr = GET_FIRST(&obj_used_list);
 	while (ptr != END_OF_LIST(&obj_used_list)) {
-		if (ptr->type == OBJ_SHIP) {
+		if ((ptr->type == OBJ_SHIP) || (ptr->type == OBJ_START)){
 			i = ptr->instance;
 			if (!strnicmp(m_name, Ships[i].ship_name, strlen(m_name))) {
 				char *namep;
@@ -103,11 +105,31 @@
 		ptr = GET_NEXT(ptr);
 	}
 
+	for (i=0; i<Num_iffs; i++)
+		if (!stricmp(m_name, Iff_info[i].iff_name)) {
+			msg.Format("The name \"%s\" is already being used by a team", m_name);
+			MessageBox(msg);
+			return;
+		}
+
+	for ( t=0; t < Ai_tp_list.size(); t++)
+		if (!stricmp(m_name, Ai_tp_list[t].name)) {
+			msg.Format("The name \"%s\" is already being used by a target priority group", m_name);
+			MessageBox(msg);
+			return;
+		}
+
 	for (i=0; i<MAX_WAYPOINT_LISTS; i++)
 		if (Waypoint_lists[i].count && !stricmp(Waypoint_lists[i].name, m_name)) {
 			MessageBox("This wing name is already being used by a waypoint path");
 			return;
 		}
-
+	
+	lft = m_name.Left(1);
+	if (!stricmp(lft, "<")) {
+		MessageBox("Wing names not allowed to begine with <");
+		return;
+	}
+	
 	CDialog::OnOK();
 }
Index: fred2/shipeditordlg.cpp
===================================================================
--- fred2/shipeditordlg.cpp	(revision 5691)
+++ fred2/shipeditordlg.cpp	(working copy)
@@ -1002,8 +1002,10 @@
 int CShipEditorDlg::update_data(int redraw)
 {
 	char *str, old_name[255];
+	CString lft;
 	object *ptr;
 	int i, z, wing;
+	size_t t;
 	CSingleLock sync(&CS_cur_object_index), sync2(&CS_update);
 
 	nprintf(("Fred routing", "Ship dialog save\n"));
@@ -1069,6 +1071,39 @@
 				UpdateData(FALSE);
 			}
 
+		for (i=0; i<Num_iffs; i++)
+			if (!stricmp(m_ship_name, Iff_info[i].iff_name)) {
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This ship name is already being used by a team.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+				m_ship_name = _T(Ships[single_ship].ship_name);
+				UpdateData(FALSE);
+			}
+
+		for ( t=0; t < Ai_tp_list.size(); t++)
+			if (!stricmp(m_ship_name, Ai_tp_list[t].name)) 
+			{
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This ship name is already being used by a target priority group.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+				m_ship_name = _T(Ships[single_ship].ship_name);
+				UpdateData(FALSE);
+			}
+
 		for (i=0; i<MAX_WAYPOINT_LISTS; i++)
 			if (Waypoint_lists[i].count && !stricmp(Waypoint_lists[i].name, m_ship_name)) {
 				if (bypass_errors)
@@ -1085,7 +1120,7 @@
 				UpdateData(FALSE);
 			}
 
-			if(jumpnode_get_by_name(m_ship_name) != NULL)
+		if(jumpnode_get_by_name(m_ship_name) != NULL)
 		{
 			if (bypass_errors)
 				return 1;
@@ -1101,7 +1136,23 @@
 			m_ship_name = _T(Ships[single_ship].ship_name);
 			UpdateData(FALSE);
 		}
+		
+		lft = m_ship_name.Left(1);
+		if (!stricmp(lft, "<")) {
+			if (bypass_errors)
+				return 1;
 
+			bypass_errors = 1;
+			z = MessageBox("Ship names not allowed to begin with <\n"
+				"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+			if (z == IDCANCEL)
+				return -1;
+
+			m_ship_name = _T(Ships[single_ship].ship_name);
+			UpdateData(FALSE);
+		}
+
 		wing = Ships[single_ship].wingnum;
 		if (wing >= 0) {
 			Assert((wing < MAX_WINGS) && Wings[wing].wave_count);
Index: fred2/waypointpathdlg.cpp
===================================================================
--- fred2/waypointpathdlg.cpp	(revision 5691)
+++ fred2/waypointpathdlg.cpp	(working copy)
@@ -21,6 +21,7 @@
 #include "ai/aigoals.h"
 #include "starfield/starfield.h"
 #include "jumpnode/jumpnode.h"
+#include "iff_defs/iff_defs.h"
 
 #define ID_JUMP_NODE_MENU	8000
 #define ID_WAYPOINT_MENU	9000
@@ -147,6 +148,8 @@
 	char *str, old_name[255];
 	int i, z;
 	object *ptr;
+	size_t t;
+	CString lft;
 
 	if (!GetSafeHwnd())
 		return 0;
@@ -178,7 +181,7 @@
 
 		ptr = GET_FIRST(&obj_used_list);
 		while (ptr != END_OF_LIST(&obj_used_list)) {
-			if (ptr->type == OBJ_SHIP) {
+			if ((ptr->type == OBJ_SHIP) || (ptr->type == OBJ_START)) {
 				if (!stricmp(m_name, Ships[ptr->instance].ship_name)) {
 					if (bypass_errors)
 						return 1;
@@ -198,9 +201,43 @@
 			ptr = GET_NEXT(ptr);
 		}
 
+		for (i=0; i<Num_iffs; i++)
+			if (!stricmp(m_name, Iff_info[i].iff_name)) 
+			{
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This waypoint path name is already being used by a team.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+				m_name = _T(Waypoint_lists[cur_waypoint_list].name);
+				UpdateData(FALSE);
+			}
+
+		for ( t=0; t < Ai_tp_list.size(); t++)
+			if (!stricmp(m_name, Ai_tp_list[t].name)) 
+			{
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This waypoint path name is already being used by a target priority group.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+				m_name = _T(Waypoint_lists[cur_waypoint_list].name);
+				UpdateData(FALSE);
+			}
+
 		for (i=0; i<MAX_WAYPOINT_LISTS; i++)
-		{
-			if (Waypoint_lists[i].count && !stricmp(Waypoint_lists[i].name, m_name) && (i != cur_waypoint_list)) {
+			if (Waypoint_lists[i].count && !stricmp(Waypoint_lists[i].name, m_name) && (i != cur_waypoint_list)) 
+			{
 				if (bypass_errors)
 					return 1;
 
@@ -214,7 +251,6 @@
 				m_name = _T(Waypoint_lists[cur_waypoint_list].name);
 				UpdateData(FALSE);
 			}
-		}
 
 		if(jumpnode_get_by_name(m_name) != NULL)
 		{
@@ -232,6 +268,23 @@
 			UpdateData(FALSE);
 		}
 
+		lft = m_name.Left(1);
+		if (!stricmp(lft, "<")) {
+			if (bypass_errors)
+				return 1;
+
+			bypass_errors = 1;
+			z = MessageBox("Waypoint names not allowed to begin with <\n"
+				"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+			if (z == IDCANCEL)
+				return -1;
+
+			m_name = _T(Waypoint_lists[cur_waypoint_list].name);
+			UpdateData(FALSE);
+		}
+
+
 		strcpy_s(old_name, Waypoint_lists[cur_waypoint_list].name);
 		string_copy(Waypoint_lists[cur_waypoint_list].name, m_name, NAME_LENGTH, 1);
 
@@ -265,7 +318,7 @@
 
 		ptr = GET_FIRST(&obj_used_list);
 		while (ptr != END_OF_LIST(&obj_used_list)) {
-			if (ptr->type == OBJ_SHIP) {
+			if ((ptr->type == OBJ_SHIP) || (ptr->type == OBJ_START)) {
 				if (!stricmp(m_name, Ships[ptr->instance].ship_name)) {
 					if (bypass_errors)
 						return 1;
@@ -285,6 +338,38 @@
 			ptr = GET_NEXT(ptr);
 		}
 
+		for (i=0; i<Num_iffs; i++)
+			if (!stricmp(m_name, Iff_info[i].iff_name)) {
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This jump node name is already being used by a team.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+				m_name = _T(jnp->get_name_ptr());
+				UpdateData(FALSE);
+			}
+
+		for ( t=0; t < Ai_tp_list.size(); t++)
+			if (!stricmp(m_name, Ai_tp_list[t].name)) {
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This jump node name is already being used by a target priority group.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+				m_name = _T(jnp->get_name_ptr());
+				UpdateData(FALSE);
+			}
+
 		for (i=0; i<MAX_WAYPOINT_LISTS; i++)
 		{
 			if (Waypoint_lists[i].count && !stricmp(Waypoint_lists[i].name, m_name)) {
@@ -303,7 +388,22 @@
 			}
 		}
 
+		lft = m_name.Left(1);
+		if (!stricmp(lft, "<")) {
+			if (bypass_errors)
+				return 1;
 
+			bypass_errors = 1;
+			z = MessageBox("Jump node names not allowed to begin with <\n"
+				"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+			if (z == IDCANCEL)
+				return -1;
+
+			m_name = _T(jnp->get_name_ptr());
+			UpdateData(FALSE);
+		}
+
 		strcpy_s(old_name, jnp->get_name_ptr());
 		string_copy(jnp->get_name_ptr(), m_name, NAME_LENGTH, 1);
 
Index: fred2/wing_editor.cpp
===================================================================
--- fred2/wing_editor.cpp	(revision 5691)
+++ fred2/wing_editor.cpp	(working copy)
@@ -22,6 +22,7 @@
 #include "jumpnode/jumpnode.h"
 #include "cfile/cfile.h"
 #include "restrictpaths.h"
+#include "iff_defs/iff_defs.h"
 
 #define ID_WING_MENU 9000
 
@@ -538,7 +539,9 @@
 {
 	char *str, old_name[255], buf[512];
 	int i, z;
+	size_t t;
 	object *ptr;
+	CString lft;
 
 	nprintf(("Fred routing", "Wing dialog save\n"));
 	if (!GetSafeHwnd())
@@ -569,7 +572,7 @@
 
 		ptr = GET_FIRST(&obj_used_list);
 		while (ptr != END_OF_LIST(&obj_used_list)) {
-			if (ptr->type == OBJ_SHIP) {
+			if ((ptr->type == OBJ_SHIP) || (ptr->type == OBJ_START)) {
 				if (!stricmp(m_wing_name, Ships[ptr->instance].ship_name)) {
 					if (bypass_errors)
 						return 1;
@@ -589,8 +592,43 @@
 			ptr = GET_NEXT(ptr);
 		}
 
+		for (i=0; i<Num_iffs; i++)
+			if (!stricmp(m_wing_name, Iff_info[i].iff_name)) 
+			{
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This wing name is already being used by a team.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+				m_wing_name = _T(Wings[cur_wing].name);
+				UpdateData(FALSE);
+			}
+
+		for ( t=0; t < Ai_tp_list.size(); t++)
+			if (!stricmp(m_wing_name, Ai_tp_list[t].name)) 
+			{
+				if (bypass_errors)
+					return 1;
+
+				bypass_errors = 1;
+				z = MessageBox("This wing name is already being used by a target priority group.\n"
+					"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+				if (z == IDCANCEL)
+					return -1;
+
+				m_wing_name = _T(Wings[cur_wing].name);
+				UpdateData(FALSE);
+			}
+
 		for (i=0; i<MAX_WAYPOINT_LISTS; i++)
-			if (Waypoint_lists[i].count && !stricmp(Waypoint_lists[i].name, m_wing_name)) {
+			if (Waypoint_lists[i].count && !stricmp(Waypoint_lists[i].name, m_wing_name)) 
+			{
 				if (bypass_errors)
 					return 1;
 
@@ -605,7 +643,7 @@
 				UpdateData(FALSE);
 			}
 
-			if(jumpnode_get_by_name(m_wing_name) != NULL)
+		if(jumpnode_get_by_name(m_wing_name) != NULL)
 			{
 				if (bypass_errors)
 					return 1;
@@ -619,8 +657,25 @@
 
 				m_wing_name = _T(Wings[cur_wing].name);
 				UpdateData(FALSE);
-			}
+		}
 
+
+		lft = m_wing_name.Left(1);
+		if (!stricmp(lft, "<")) {
+			if (bypass_errors)
+				return 1;
+
+			bypass_errors = 1;
+			z = MessageBox("Wing names not allowed to begin with <\n"
+				"Press OK to restore old name", "Error", MB_ICONEXCLAMATION | MB_OKCANCEL);
+
+			if (z == IDCANCEL)
+				return -1;
+
+			m_wing_name = _T(Wings[cur_wing].name);
+			UpdateData(FALSE);
+		}
+
 		strcpy_s(old_name, Wings[cur_wing].name);
 		string_copy(Wings[cur_wing].name, m_wing_name, NAME_LENGTH, 1);
 		update_data_safe();
name_checks2.patch (11,752 bytes)   

FUBAR-BDHR

2009-12-01 04:21

developer   ~0011361

Attached newer version that also does the checks during wing creation. Also added checks for any ship/wing/waypoint/jump node names beginning with < since it was possible to use names like <argument> <any friendly> <any wingman> etc.

The_E

2010-11-12 12:18

administrator   ~0012450

Fix was committed to trunk ages ago. Marking as fixed.

Issue History

Date Modified Username Field Change
2009-11-25 10:54 FUBAR-BDHR New Issue
2009-11-30 10:23 FUBAR-BDHR File Added: name_checks.patch
2009-11-30 10:27 FUBAR-BDHR Note Added: 0011356
2009-12-01 04:19 FUBAR-BDHR File Added: name_checks2.patch
2009-12-01 04:21 FUBAR-BDHR Note Added: 0011361
2010-02-13 09:15 karajorma Status new => assigned
2010-02-13 09:15 karajorma Assigned To => FUBAR-BDHR
2010-11-12 12:18 The_E Note Added: 0012450
2010-11-12 12:18 The_E Status assigned => resolved
2010-11-12 12:18 The_E Fixed in Version => 3.6.12
2010-11-12 12:18 The_E Resolution open => fixed