From 7788198f2661ad080414e23d6a42918efb569403 Mon Sep 17 00:00:00 2001 From: David Sparer Date: Sun, 4 Feb 2018 11:52:26 -0600 Subject: [PATCH] fixed an issue with serializing csv data with semi colons in fields --- ...CsvConnectionsSerializerMremotengFormat.cs | 113 ++++++++++-------- 1 file changed, 63 insertions(+), 50 deletions(-) diff --git a/mRemoteV1/Config/Serializers/MiscSerializers/CsvConnectionsSerializerMremotengFormat.cs b/mRemoteV1/Config/Serializers/MiscSerializers/CsvConnectionsSerializerMremotengFormat.cs index c7432e6fc..9a7058fc5 100644 --- a/mRemoteV1/Config/Serializers/MiscSerializers/CsvConnectionsSerializerMremotengFormat.cs +++ b/mRemoteV1/Config/Serializers/MiscSerializers/CsvConnectionsSerializerMremotengFormat.cs @@ -87,63 +87,67 @@ namespace mRemoteNG.Config.Serializers { var csvLine = Environment.NewLine; - csvLine += con.Name + ";" + GetNodePath(con) + ";" + con.Description + ";" + con.Icon + ";" + con.Panel + ";"; + csvLine += CleanStringForCsv(con.Name) + ";" + + CleanStringForCsv(GetNodePath(con)) + ";" + + CleanStringForCsv(con.Description) + ";" + + CleanStringForCsv(con.Icon) + ";" + + CleanStringForCsv(con.Panel) + ";"; if (_saveFilter.SaveUsername) - csvLine += con.Username + ";"; + csvLine += CleanStringForCsv(con.Username) + ";"; if (_saveFilter.SavePassword) - csvLine += con.Password + ";"; + csvLine += CleanStringForCsv(con.Password) + ";"; if (_saveFilter.SaveDomain) - csvLine += con.Domain + ";"; + csvLine += CleanStringForCsv(con.Domain) + ";"; - csvLine += con.Hostname + ";" + - con.Protocol + ";" + - con.PuttySession + ";" + - Convert.ToString(con.Port) + ";" + - Convert.ToString(con.UseConsoleSession) + ";" + - Convert.ToString(con.UseCredSsp) + ";" + - con.RenderingEngine + ";" + - con.ICAEncryptionStrength + ";" + - con.RDPAuthenticationLevel + ";" + - con.LoadBalanceInfo + ";" + - con.Colors + ";" + - con.Resolution + ";" + - Convert.ToString(con.AutomaticResize) + ";" + - Convert.ToString(con.DisplayWallpaper) + ";" + - Convert.ToString(con.DisplayThemes) + ";" + - Convert.ToString(con.EnableFontSmoothing) + ";" + - Convert.ToString(con.EnableDesktopComposition) + ";" + - Convert.ToString(con.CacheBitmaps) + ";" + - Convert.ToString(con.RedirectDiskDrives) + ";" + - Convert.ToString(con.RedirectPorts) + ";" + - Convert.ToString(con.RedirectPrinters) + ";" + - Convert.ToString(con.RedirectSmartCards) + ";" + - con.RedirectSound + ";" + - Convert.ToString(con.RedirectKeys) + ";" + - con.PreExtApp + ";" + - con.PostExtApp + ";" + - con.MacAddress + ";" + - con.UserField + ";" + - con.ExtApp + ";" + - con.VNCCompression + ";" + - con.VNCEncoding + ";" + - con.VNCAuthMode + ";" + - con.VNCProxyType + ";" + - con.VNCProxyIP + ";" + - Convert.ToString(con.VNCProxyPort) + ";" + - con.VNCProxyUsername + ";" + - con.VNCProxyPassword + ";" + - con.VNCColors + ";" + - con.VNCSmartSizeMode + ";" + - Convert.ToString(con.VNCViewOnly) + ";" + - con.RDGatewayUsageMethod + ";" + - con.RDGatewayHostname + ";" + - con.RDGatewayUseConnectionCredentials + ";" + - con.RDGatewayUsername + ";" + - con.RDGatewayPassword + ";" + - con.RDGatewayDomain + ";"; + csvLine += CleanStringForCsv(con.Hostname) + ";" + + CleanStringForCsv(con.Protocol) + ";" + + CleanStringForCsv(con.PuttySession) + ";" + + CleanStringForCsv(con.Port) + ";" + + CleanStringForCsv(con.UseConsoleSession) + ";" + + CleanStringForCsv(con.UseCredSsp) + ";" + + CleanStringForCsv(con.RenderingEngine) + ";" + + CleanStringForCsv(con.ICAEncryptionStrength) + ";" + + CleanStringForCsv(con.RDPAuthenticationLevel) + ";" + + CleanStringForCsv(con.LoadBalanceInfo) + ";" + + CleanStringForCsv(con.Colors) + ";" + + CleanStringForCsv(con.Resolution) + ";" + + CleanStringForCsv(con.AutomaticResize) + ";" + + CleanStringForCsv(con.DisplayWallpaper) + ";" + + CleanStringForCsv(con.DisplayThemes) + ";" + + CleanStringForCsv(con.EnableFontSmoothing) + ";" + + CleanStringForCsv(con.EnableDesktopComposition) + ";" + + CleanStringForCsv(con.CacheBitmaps) + ";" + + CleanStringForCsv(con.RedirectDiskDrives) + ";" + + CleanStringForCsv(con.RedirectPorts) + ";" + + CleanStringForCsv(con.RedirectPrinters) + ";" + + CleanStringForCsv(con.RedirectSmartCards) + ";" + + CleanStringForCsv(con.RedirectSound) + ";" + + CleanStringForCsv(con.RedirectKeys) + ";" + + CleanStringForCsv(con.PreExtApp) + ";" + + CleanStringForCsv(con.PostExtApp) + ";" + + CleanStringForCsv(con.MacAddress) + ";" + + CleanStringForCsv(con.UserField) + ";" + + CleanStringForCsv(con.ExtApp) + ";" + + CleanStringForCsv(con.VNCCompression) + ";" + + CleanStringForCsv(con.VNCEncoding) + ";" + + CleanStringForCsv(con.VNCAuthMode) + ";" + + CleanStringForCsv(con.VNCProxyType) + ";" + + CleanStringForCsv(con.VNCProxyIP) + ";" + + CleanStringForCsv(con.VNCProxyPort) + ";" + + CleanStringForCsv(con.VNCProxyUsername) + ";" + + CleanStringForCsv(con.VNCProxyPassword) + ";" + + CleanStringForCsv(con.VNCColors) + ";" + + CleanStringForCsv(con.VNCSmartSizeMode) + ";" + + CleanStringForCsv(con.VNCViewOnly) + ";" + + CleanStringForCsv(con.RDGatewayUsageMethod) + ";" + + CleanStringForCsv(con.RDGatewayHostname) + ";" + + CleanStringForCsv(con.RDGatewayUseConnectionCredentials) + ";" + + CleanStringForCsv(con.RDGatewayUsername) + ";" + + CleanStringForCsv(con.RDGatewayPassword) + ";" + + CleanStringForCsv(con.RDGatewayDomain) + ";"; if (_saveFilter.SaveInheritance) @@ -207,6 +211,15 @@ namespace mRemoteNG.Config.Serializers _csv += csvLine; } + /// + /// Remove text that is unsafe for use in CSV files + /// + /// + private string CleanStringForCsv(object text) + { + return text.ToString().Replace(";", ""); + } + private string GetNodePath(ConnectionInfo connectionInfo) { var nodePath = "";