From cf0d2663d32ca3c59c799a1499c3b3713ce5a4af Mon Sep 17 00:00:00 2001 From: Michael Ganss Date: Tue, 7 Jun 2022 12:18:06 +0200 Subject: [PATCH] Prevent stack overflow (fixes #329) --- .../xsd/simple/recursive.xsd | 49 +++++++++++++++++++ XmlSchemaClassGenerator/ModelBuilder.cs | 2 +- 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 XmlSchemaClassGenerator.Tests/xsd/simple/recursive.xsd diff --git a/XmlSchemaClassGenerator.Tests/xsd/simple/recursive.xsd b/XmlSchemaClassGenerator.Tests/xsd/simple/recursive.xsd new file mode 100644 index 00000000..11832ad8 --- /dev/null +++ b/XmlSchemaClassGenerator.Tests/xsd/simple/recursive.xsd @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/XmlSchemaClassGenerator/ModelBuilder.cs b/XmlSchemaClassGenerator/ModelBuilder.cs index 5db02dc8..b6b81073 100644 --- a/XmlSchemaClassGenerator/ModelBuilder.cs +++ b/XmlSchemaClassGenerator/ModelBuilder.cs @@ -380,7 +380,7 @@ private IEnumerable GetSubstitutedElements(XmlQualifiedName name) { if (SubstitutionGroups.TryGetValue(name, out var substitutes)) { - foreach (var substitute in substitutes) + foreach (var substitute in substitutes.Where(s => s.Element.QualifiedName != name)) { yield return substitute; foreach (var recursiveSubstitute in GetSubstitutedElements(substitute.Element.QualifiedName))