@@ -506,7 +506,8 @@ function ConvertFrom-Yaml {
506506
507507function Get-Serializer {
508508 param (
509- [Parameter (Mandatory = $true )][SerializationOptions ]$Options
509+ [Parameter (Mandatory = $true )][SerializationOptions ]$Options ,
510+ [int ]$MaxDepth = 100
510511 )
511512
512513 $builder = $yamlDotNetAssembly.GetType (' YamlDotNet.Serialization.SerializerBuilder' )::new()
@@ -532,13 +533,16 @@ function Get-Serializer {
532533 $builder = $builder.WithIndentedSequences ()
533534 }
534535
536+ # Set a high recursion limit - our custom visitors handle depth limiting and circular references
537+ $builder = $builder.WithMaximumRecursion (1000 )
538+
535539 $omitNull = $Options.HasFlag ([SerializationOptions ]::OmitNullValues)
536540 $useFlowStyle = $Options.HasFlag ([SerializationOptions ]::UseFlowStyle)
537541 $useSequenceFlowStyle = $Options.HasFlag ([SerializationOptions ]::UseSequenceFlowStyle)
538542 $useBlockStyle = $Options.HasFlag ([SerializationOptions ]::UseBlockStyle)
539543 $useSequenceBlockStyle = $Options.HasFlag ([SerializationOptions ]::UseSequenceBlockStyle)
540544
541- $builder = $script :BuilderUtils ::BuildSerializer($builder , $omitNull , $useFlowStyle , $useSequenceFlowStyle , $useBlockStyle , $useSequenceBlockStyle , $JsonCompatible )
545+ $builder = $script :BuilderUtils ::BuildSerializer($builder , $omitNull , $useFlowStyle , $useSequenceFlowStyle , $useBlockStyle , $useSequenceBlockStyle , $JsonCompatible , $MaxDepth )
542546
543547 return $builder.Build ()
544548}
@@ -564,7 +568,10 @@ function ConvertTo-Yaml {
564568 # Typed YAML parameters (for YamlBase objects)
565569 [switch ]$OmitNull ,
566570
567- [switch ]$EmitTags
571+ [switch ]$EmitTags ,
572+
573+ # Maximum recursion depth (default: 50)
574+ [int ]$Depth = 100
568575 )
569576 begin {
570577 $d = [System.Collections.Generic.List [object ]](New-Object ' System.Collections.Generic.List[object]' )
@@ -598,7 +605,7 @@ function ConvertTo-Yaml {
598605 $useSequenceBlockStyle = $Options.HasFlag ([SerializationOptions ]::UseSequenceBlockStyle)
599606 $indentedSequences = $Options.HasFlag ([SerializationOptions ]::WithIndentedSequences)
600607 }
601- $yaml = $script :TypedYamlConverter ::ToYaml($d , $OmitNull.IsPresent , $EmitTags.IsPresent , $useFlowStyle , $useBlockStyle , $useSequenceFlowStyle , $useSequenceBlockStyle , $indentedSequences )
608+ $yaml = $script :TypedYamlConverter ::ToYaml($d , $OmitNull.IsPresent , $EmitTags.IsPresent , $useFlowStyle , $useBlockStyle , $useSequenceFlowStyle , $useSequenceBlockStyle , $indentedSequences , $Depth )
602609 } else {
603610 throw " Typed YAML module not loaded"
604611 }
@@ -610,7 +617,7 @@ function ConvertTo-Yaml {
610617 if ($PSCmdlet.ParameterSetName -eq ' Options' ) {
611618 $indentedSequences = $Options.HasFlag ([SerializationOptions ]::WithIndentedSequences)
612619 }
613- $yaml = $MetadataAwareSerializer ::Serialize($d , $indentedSequences , $EmitTags.IsPresent )
620+ $yaml = $MetadataAwareSerializer ::Serialize($d , $indentedSequences , $EmitTags.IsPresent , $Depth )
614621 } else {
615622 $wrt = New-Object ' System.IO.StringWriter'
616623 $norm = Convert-PSObjectToGenericObject $d
@@ -622,7 +629,7 @@ function ConvertTo-Yaml {
622629 }
623630 }
624631 try {
625- $serializer = Get-Serializer $Options
632+ $serializer = Get-Serializer - Options $Options - MaxDepth $Depth
626633 $serializer.Serialize ($wrt , $norm )
627634 $yaml = $wrt.ToString ()
628635 } finally {
0 commit comments