Skip to content

Commit 41735ff

Browse files
authored
Fix stackoverflow during property flatten (Azure#52899)
1 parent cfd9280 commit 41735ff

File tree

10 files changed

+1633
-1326
lines changed

10 files changed

+1633
-1326
lines changed

eng/packages/http-client-csharp-mgmt/generator/Azure.Generator.Management/src/Visitors/FlattenPropertyVisitor.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,9 +239,16 @@ int GetAdditionalPropertyIndex()
239239
// This dictionary holds the flattened model types, where the key is the CSharpType of the model and the value is a dictionary of property names to flattened PropertyProvider.
240240
// So that, we can use this to update the model factory methods later.
241241
private readonly Dictionary<CSharpType, (Dictionary<string, List<FlattenPropertyInfo>>, Dictionary<CSharpType, List<FlattenPropertyInfo>>)> _flattenedModelTypes = new(new CSharpTypeNameComparer());
242-
242+
private readonly HashSet<CSharpType> _visitedModelTypes = new();
243243
private void FlattenModel(ModelProvider model)
244244
{
245+
if (_visitedModelTypes.Contains(model.Type))
246+
{
247+
// already visiting this model type, we have a cycle, return
248+
return;
249+
}
250+
_visitedModelTypes.Add(model.Type);
251+
245252
var isFlattenProperty = false;
246253
var isSafeFlatten = false;
247254
var propertyMap = new Dictionary<PropertyProvider, List<FlattenPropertyInfo>>();

eng/packages/http-client-csharp-mgmt/generator/TestProjects/Local/Mgmt-TypeSpec/foo.tsp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ model FooProperties {
3333

3434
prop1: string[];
3535
prop2?: int32[];
36+
37+
nestedProperty: NestedFooModel;
38+
}
39+
40+
model NestedFooModel {
41+
properties: FooProperties;
3642
}
3743

3844
@armResourceOperations

eng/packages/http-client-csharp-mgmt/generator/TestProjects/Local/Mgmt-TypeSpec/src/Generated/FooData.cs

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

eng/packages/http-client-csharp-mgmt/generator/TestProjects/Local/Mgmt-TypeSpec/src/Generated/MgmtTypeSpecModelFactory.cs

Lines changed: 7 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

eng/packages/http-client-csharp-mgmt/generator/TestProjects/Local/Mgmt-TypeSpec/src/Generated/Models/FooProperties.Serialization.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

eng/packages/http-client-csharp-mgmt/generator/TestProjects/Local/Mgmt-TypeSpec/src/Generated/Models/FooProperties.cs

Lines changed: 24 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

eng/packages/http-client-csharp-mgmt/generator/TestProjects/Local/Mgmt-TypeSpec/src/Generated/Models/MgmtTypeSpecContext.cs

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

eng/packages/http-client-csharp-mgmt/generator/TestProjects/Local/Mgmt-TypeSpec/src/Generated/Models/NestedFooModel.Serialization.cs

Lines changed: 143 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)