[DatFile] Make XML parsing safer; skip malformed XML lines

This commit is contained in:
Matt Nadareski
2016-09-28 12:27:39 -07:00
parent 735e76ccda
commit 36f9b12d06
5 changed files with 824 additions and 811 deletions

View File

@@ -33,7 +33,7 @@ namespace SabreTools
Dictionary<string, Tuple<long, bool>> depots = new Dictionary<string, Tuple<long, bool>>();
// Get the XML text reader for the configuration file, if possible
XmlTextReader xtr = FileTools.GetXmlTextReader(_config, _logger);
XmlReader xtr = FileTools.GetXmlTextReader(_config, _logger);
// Now parse the XML file for settings
if (xtr != null)

View File

@@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
namespace SabreTools.Helper
{

File diff suppressed because it is too large Load Diff

View File

@@ -64,7 +64,7 @@ namespace SabreTools.Helper
}
Logger logger = new Logger(false, "");
XmlTextReader xtr = FileTools.GetXmlTextReader(filename, logger);
XmlReader xtr = FileTools.GetXmlTextReader(filename, logger);
if (xtr == null)
{

View File

@@ -6,6 +6,7 @@ using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Xml;
using System.Xml.Schema;
namespace SabreTools.Helper
{
@@ -176,7 +177,7 @@ namespace SabreTools.Helper
/// <param name="filename">Name of the file to be parsed</param>
/// <param name="logger">Logger object for console and file output</param>
/// <returns>The XmlTextReader representing the (possibly converted) file, null otherwise</returns>
public static XmlTextReader GetXmlTextReader(string filename, Logger logger)
public static XmlReader GetXmlTextReader(string filename, Logger logger)
{
logger.Verbose("Attempting to read file: \"" + filename + "\"");
@@ -187,10 +188,14 @@ namespace SabreTools.Helper
return null;
}
XmlTextReader xtr;
xtr = new XmlTextReader(filename);
xtr.WhitespaceHandling = WhitespaceHandling.None;
xtr.DtdProcessing = DtdProcessing.Ignore;
XmlReader xtr = XmlReader.Create(filename, new XmlReaderSettings {
CheckCharacters = false,
DtdProcessing = DtdProcessing.Ignore,
IgnoreComments = true,
IgnoreWhitespace = true,
ValidationFlags = XmlSchemaValidationFlags.None,
ValidationType = ValidationType.None,
});
return xtr;
}