Просмотр исходного кода

Fix to display strings safely in debug messages.

Display strings safely, even if they are invalid, e.g. data in a received
message was corrupted.

Author: Tim Beale <tim.beale@alliedtelesis.co.nz>



git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@1657 fd59a12c-fef9-0310-b244-a6a79926bd2f
Angus Salkeld 17 лет назад
Родитель
Сommit
280ef18d61
1 измененных файлов с 8 добавлено и 11 удалено
  1. 8 11
      exec/util.c

+ 8 - 11
exec/util.c

@@ -86,21 +86,18 @@ void _corosync_exit_error (
 	exit (EXIT_FAILURE);
 	exit (EXIT_FAILURE);
 }
 }
 
 
+#define min(a,b) ((a) < (b) ? (a) : (b))
+
 char *getSaNameT (SaNameT *name)
 char *getSaNameT (SaNameT *name)
 {
 {
-#if 0
-	static char ret_name[300];
-
-	memset (ret_name, 0, sizeof (ret_name));
-	if (name->length > 299) {
-		memcpy (ret_name, name->value, 299);
-	} else {
+	static char ret_name[SA_MAX_NAME_LENGTH];
 
 
-		memcpy (ret_name, name->value, name->length);
+	/* if string is corrupt (non-terminated), ensure it's displayed safely */
+	if (name->length >= SA_MAX_NAME_LENGTH || name->value[name->length] != '\0') {
+		memset (ret_name, 0, sizeof (ret_name));
+		memcpy (ret_name, name->value, min(name->length, SA_MAX_NAME_LENGTH -1));
+		return (ret_name);
 	}
 	}
-	return (ret_name);
-#endif
-// TODO
 	return ((char *)name->value);
 	return ((char *)name->value);
 }
 }