From 63c9c3e277dc983bd421a0424b96f858b8ea1c34 Mon Sep 17 00:00:00 2001 From: hbeham Date: Sat, 14 Sep 2019 23:22:08 +0200 Subject: [PATCH] Steam Web API puts illegal characters from server names into the XML, which will then cause .NET XmlSerializer to throw an exception. This release replaces invalid characters with spaces. --- QueryMaster/QueryMaster/MasterServerWebApi.cs | 15 +++++++++++++++ QueryMaster/QueryMaster/QueryMaster.csproj | 12 ++++++++---- ServerBrowser/ServerBrowserForm.cs | 2 +- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/QueryMaster/QueryMaster/MasterServerWebApi.cs b/QueryMaster/QueryMaster/MasterServerWebApi.cs index d8c286f..4dc8367 100644 --- a/QueryMaster/QueryMaster/MasterServerWebApi.cs +++ b/QueryMaster/QueryMaster/MasterServerWebApi.cs @@ -3,6 +3,7 @@ using System.Collections.ObjectModel; using System.IO; using System.Net; +using System.Text; using System.Threading; using System.Xml.Serialization; @@ -70,6 +71,20 @@ public override void GetAddresses(Region region, MasterIpCallback callback, IpFi var url = $"https://api.steampowered.com/IGameServersService/GetServerList/v1/?key={SteamWebApiKey}&format=xml&filter={filters}&limit={GetAddressesLimit}"; var xml = cli.DownloadString(url); var ser = new XmlSerializer(typeof (Response)); + + // replace invalid XML chars ( < 32 ) with char reference + var sb = new StringBuilder(xml); + for (int i = 0, c = xml.Length; i < c; i++) + { + if (sb[i] < 32 && !char.IsWhiteSpace(sb[i])) + //{ + // sb.Insert(i+1, "#" + ((int)sb[i]).ToString() + ";"); + // sb[i] = '&'; + //} + sb[i] = ' '; + } + xml = sb.ToString(); + var resp = (Response) ser.Deserialize(new StringReader(xml)); var endpoints = new List>(); diff --git a/QueryMaster/QueryMaster/QueryMaster.csproj b/QueryMaster/QueryMaster/QueryMaster.csproj index 9500889..c6a2874 100644 --- a/QueryMaster/QueryMaster/QueryMaster.csproj +++ b/QueryMaster/QueryMaster/QueryMaster.csproj @@ -12,10 +12,14 @@ QueryMaster v4.5.2 512 - SAK - SAK - SAK - SAK + + + + + + + + diff --git a/ServerBrowser/ServerBrowserForm.cs b/ServerBrowser/ServerBrowserForm.cs index a0e1405..f9ecada 100644 --- a/ServerBrowser/ServerBrowserForm.cs +++ b/ServerBrowser/ServerBrowserForm.cs @@ -31,7 +31,7 @@ namespace ServerBrowser { public partial class ServerBrowserForm : XtraForm { - private const string Version = "2.50"; + private const string Version = "2.51"; private const string DevExpressVersion = "v19.1"; private const string SteamWebApiText = ""; private const string CustomDetailColumnPrefix = "ServerInfo.";