Skip to content

Commit b5a471f

Browse files
committed
Made XML readers more tolerant to comments
1 parent 967af0a commit b5a471f

File tree

6 files changed

+28
-1
lines changed

6 files changed

+28
-1
lines changed

CodeWalker.Core/GameFiles/GameFileCache.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,7 @@ private void InitDlcList()
350350
{
351351
foreach (XmlNode itemnode in pathsnode.ChildNodes)
352352
{
353+
if (itemnode.NodeType != XmlNodeType.Element) continue;
353354
DlcPaths.Add(itemnode.InnerText.ToLowerInvariant().Replace('\\', '/').Replace("platform:", "x64"));
354355
}
355356
}

CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -828,6 +828,8 @@ private static Array_Structure TraverseArrayStructure(XmlNode node, MetaBuilder
828828

829829
foreach (XmlNode cnode in node.ChildNodes)
830830
{
831+
if (cnode.NodeType != XmlNodeType.Element) continue;
832+
831833
var struc = Traverse(cnode, mb, type);
832834

833835
if (struc != null)
@@ -845,6 +847,8 @@ private static Array_StructurePointer TraverseArrayStructurePointer(XmlNode node
845847

846848
foreach (XmlNode cnode in node.ChildNodes)
847849
{
850+
if (cnode.NodeType != XmlNodeType.Element) continue;
851+
848852
var type = (MetaName)(uint)GetHash(cnode.Attributes["type"].Value);
849853
var struc = Traverse(cnode, mb, type);
850854

@@ -1018,6 +1022,7 @@ private static Array_uint TraverseHashArray(XmlNode node, MetaBuilder mb)
10181022

10191023
foreach (XmlNode cnode in node.ChildNodes)
10201024
{
1025+
if (cnode.NodeType != XmlNodeType.Element) continue;
10211026
var val = GetHash(cnode.InnerText);
10221027
items.Add(val);
10231028
}
@@ -1073,6 +1078,7 @@ private static XmlNode GetEntryNode(XmlNodeList nodes, MetaStructureEntryInfo_s
10731078
{
10741079
foreach (XmlNode node in nodes)
10751080
{
1081+
if (node.NodeType != XmlNodeType.Element) continue;
10761082
if (GetHash(node.Name) == (uint)entry.EntryNameHash)
10771083
{
10781084
return node;

CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,7 @@ private static void TraverseMap(XmlNode node, PsoBuilder pb, PsoStructureEntryIn
389389

390390
foreach (XmlNode cnode in node.ChildNodes)
391391
{
392+
if (cnode.NodeType != XmlNodeType.Element) continue;
392393
var kattr = cnode.Attributes["key"].Value;
393394
var tattr = cnode.Attributes["type"].Value;//CW invention for convenience..!
394395
var khash = (MetaName)(uint)GetHash(kattr);
@@ -723,6 +724,8 @@ private static void TraverseArray(XmlNode node, PsoBuilder pb, PsoStructureEntry
723724
arrEntry.DataOffset = entry.DataOffset;//slight hack for traversing array array
724725
foreach (XmlNode cnode in node.ChildNodes)
725726
{
727+
if (cnode.NodeType != XmlNodeType.Element) continue;
728+
726729
TraverseArray(cnode, pb, arrEntry, subarrEntry, results, data, structInfo);
727730

728731
arrEntry.DataOffset += 16;//ptr size... todo: what if not pointer array?
@@ -819,6 +822,8 @@ private static byte[][] TraverseArrayStructureRaw(XmlNode node, PsoBuilder pb, M
819822

820823
foreach (XmlNode cnode in node.ChildNodes)
821824
{
825+
if (cnode.NodeType != XmlNodeType.Element) continue;
826+
822827
var struc = Traverse(cnode, pb, type);
823828

824829
if (struc != null)
@@ -842,6 +847,8 @@ private static PsoPOINTER[] TraverseArrayStructurePointerRaw(XmlNode node, PsoBu
842847

843848
foreach (XmlNode cnode in node.ChildNodes)
844849
{
850+
if (cnode.NodeType != XmlNodeType.Element) continue;
851+
845852
var type = (MetaName)(uint)GetHash(cnode.Attributes["type"]?.Value ?? "");
846853
if (type != 0)
847854
{
@@ -1067,6 +1074,7 @@ private static MetaHash[] TraverseHashArrayRaw(XmlNode node)
10671074

10681075
foreach (XmlNode cnode in node.ChildNodes)
10691076
{
1077+
if (cnode.NodeType != XmlNodeType.Element) continue;
10701078
var val = GetHash(cnode.InnerText);
10711079
items.Add(MetaTypes.SwapBytes(val));
10721080
}
@@ -1079,6 +1087,7 @@ private static string[] TraverseStringArrayRaw(XmlNode node)
10791087

10801088
foreach (XmlNode cnode in node.ChildNodes)
10811089
{
1090+
if (cnode.NodeType != XmlNodeType.Element) continue;
10821091
items.Add(cnode.InnerText);
10831092
}
10841093

@@ -1141,6 +1150,7 @@ private static XmlNode GetEntryNode(XmlNodeList nodes, MetaName name)
11411150
{
11421151
foreach (XmlNode node in nodes)
11431152
{
1153+
if (node.NodeType != XmlNodeType.Element) continue;
11441154
if (GetHash(node.Name) == (uint)name)
11451155
{
11461156
return node;

CodeWalker.Core/GameFiles/MetaTypes/XmlRbf.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,13 @@ private static IRbfType Traverse(XNode node)
6969

7070
var n = new RbfStructure();
7171
n.Name = element.Name.LocalName;
72-
n.Children = element.Nodes().Select(c => Traverse(c)).ToList();
72+
n.Children = new List<IRbfType>();
73+
foreach (var c in element.Nodes())
74+
{
75+
var child = Traverse(c);
76+
if (child == null) continue;
77+
n.Children.Add(child);
78+
}
7379

7480
foreach (var attr in element.Attributes())
7581
{

CodeWalker.Core/GameFiles/Resources/Bounds.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1235,6 +1235,7 @@ public override void ReadXml(XmlNode node)
12351235
var polylist = new List<BoundPolygon>();
12361236
foreach (XmlNode inode in inodes)
12371237
{
1238+
if (inode.NodeType != XmlNodeType.Element) continue;
12381239
var typestr = inode.Name;
12391240
var type = Xml.GetEnumValue<BoundPolygonType>(typestr);
12401241
var poly = CreatePolygon(type);

CodeWalker.Core/World/Weather.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,7 @@ public void Init(GameFileCache gameFileCache, XmlNode node)
344344

345345
foreach (XmlNode cycle in tcxml.DocumentElement.ChildNodes)
346346
{
347+
if (cycle.NodeType != XmlNodeType.Element) continue;
347348
TimeCycleData = new WeatherCycleKeyframeData();
348349
TimeCycleData.Init(cycle);
349350
}
@@ -402,6 +403,7 @@ public void Init(XmlNode node)
402403
Regions = new Dictionary<string, WeatherCycleKeyframeRegion>();
403404
foreach (XmlNode child in node.ChildNodes)
404405
{
406+
if (child.NodeType != XmlNodeType.Element) continue;
405407
WeatherCycleKeyframeRegion r = new WeatherCycleKeyframeRegion();
406408
r.Init(child);
407409
Regions[r.Name] = r;
@@ -425,6 +427,7 @@ public void Init(XmlNode node)
425427
Data = new Dictionary<string, WeatherCycleKeyframeDataEntry>();
426428
foreach (XmlNode child in node.ChildNodes)
427429
{
430+
if (child.NodeType != XmlNodeType.Element) continue;
428431
if (child != null)
429432
{
430433
WeatherCycleKeyframeDataEntry d = new WeatherCycleKeyframeDataEntry();

0 commit comments

Comments
 (0)