From 7a3138258f8f43d9270c6699f37766e0f189d9d1 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 a2c97c8d..2f323bf0 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))