Skip to content

Commit 51eb481

Browse files
Add -Depth option
Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
1 parent 0376d2e commit 51eb481

5 files changed

Lines changed: 198 additions & 75 deletions

File tree

1.5 KB
Binary file not shown.
0 Bytes
Binary file not shown.

powershell-yaml.psm1

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,8 @@ function ConvertFrom-Yaml {
506506

507507
function 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

Comments
 (0)