Skip to content

Commit 838c847

Browse files
authored
fix: harden yaml parsing (v1 port) (#3040)
* fix: harden yaml parsing * update benchmarks * fix suggestions and improving test coverage
1 parent 59c56cf commit 838c847

29 files changed

Lines changed: 1759 additions & 183 deletions
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
```
22
3-
BenchmarkDotNet v0.14.0, Windows 11 (10.0.26100.3476)
4-
11th Gen Intel Core i7-1185G7 3.00GHz, 1 CPU, 8 logical and 4 physical cores
5-
.NET SDK 9.0.202
6-
[Host] : .NET 8.0.14 (8.0.1425.11118), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
7-
ShortRun : .NET 8.0.14 (8.0.1425.11118), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
3+
BenchmarkDotNet v0.14.0, Ubuntu 24.04.4 LTS (Noble Numbat)
4+
AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores
5+
.NET SDK 10.0.302
6+
[Host] : .NET 8.0.30 (8.0.3026.36720), X64 RyuJIT AVX2
7+
ShortRun : .NET 8.0.30 (8.0.3026.36720), X64 RyuJIT AVX2
88
99
Job=ShortRun IterationCount=3 LaunchCount=1
1010
WarmupCount=3
1111
1212
```
1313
| Method | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated |
1414
|------------- |---------------:|-------------:|-------------:|-----------:|-----------:|----------:|-------------:|
15-
| PetStoreYaml | 448.7 μs | 326.6 μs | 17.90 μs | 58.5938 | 11.7188 | - | 381.79 KB |
16-
| PetStoreJson | 484.8 μs | 156.9 μs | 8.60 μs | 62.5000 | 15.6250 | - | 389.28 KB |
17-
| GHESYaml | 1,008,349.6 μs | 565,392.0 μs | 30,991.04 μs | 66000.0000 | 23000.0000 | 4000.0000 | 382785 KB |
18-
| GHESJson | 1,039,447.0 μs | 267,501.0 μs | 14,662.63 μs | 67000.0000 | 23000.0000 | 4000.0000 | 389970.77 KB |
15+
| PetStoreYaml | 750.3 μs | 320.4 μs | 17.56 μs | 23.4375 | 3.9063 | - | 438.94 KB |
16+
| PetStoreJson | 875.7 μs | 167.0 μs | 9.15 μs | 25.3906 | 1.9531 | - | 446.38 KB |
17+
| GHESYaml | 1,775,302.8 μs | 137,608.1 μs | 7,542.76 μs | 30000.0000 | 23000.0000 | 4000.0000 | 438624.06 KB |
18+
| GHESJson | 1,924,124.8 μs | 514,004.3 μs | 28,174.31 μs | 30000.0000 | 23000.0000 | 4000.0000 | 445806.12 KB |
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Method,Job,AnalyzeLaunchVariance,EvaluateOverhead,MaxAbsoluteError,MaxRelativeError,MinInvokeCount,MinIterationTime,OutlierMode,Affinity,EnvironmentVariables,Jit,LargeAddressAware,Platform,PowerPlanMode,Runtime,AllowVeryLargeObjects,Concurrent,CpuGroups,Force,HeapAffinitizeMask,HeapCount,NoAffinitize,RetainVm,Server,Arguments,BuildConfiguration,Clock,EngineFactory,NuGetReferences,Toolchain,IsMutator,InvocationCount,IterationCount,IterationTime,LaunchCount,MaxIterationCount,MaxWarmupIterationCount,MemoryRandomization,MinIterationCount,MinWarmupIterationCount,RunStrategy,UnrollFactor,WarmupCount,Mean,Error,StdDev,Gen0,Gen1,Gen2,Allocated
2-
PetStoreYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,11111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,448.7 μs,326.6 μs,17.90 μs,58.5938,11.7188,0.0000,381.79 KB
3-
PetStoreJson,ShortRun,False,Default,Default,Default,Default,Default,Default,11111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,484.8 μs,156.9 μs,8.60 μs,62.5000,15.6250,0.0000,389.28 KB
4-
GHESYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,11111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"1,008,349.6 μs","565,392.0 μs","30,991.04 μs",66000.0000,23000.0000,4000.0000,382785 KB
5-
GHESJson,ShortRun,False,Default,Default,Default,Default,Default,Default,11111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"1,039,447.0 μs","267,501.0 μs","14,662.63 μs",67000.0000,23000.0000,4000.0000,389970.77 KB
2+
PetStoreYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,1111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,750.3 μs,320.4 μs,17.56 μs,23.4375,3.9063,0.0000,438.94 KB
3+
PetStoreJson,ShortRun,False,Default,Default,Default,Default,Default,Default,1111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,875.7 μs,167.0 μs,9.15 μs,25.3906,1.9531,0.0000,446.38 KB
4+
GHESYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,1111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"1,775,302.8 μs","137,608.1 μs","7,542.76 μs",30000.0000,23000.0000,4000.0000,438624.06 KB
5+
GHESJson,ShortRun,False,Default,Default,Default,Default,Default,Default,1111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"1,924,124.8 μs","514,004.3 μs","28,174.31 μs",30000.0000,23000.0000,4000.0000,445806.12 KB

performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.html

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<html lang='en'>
33
<head>
44
<meta charset='utf-8' />
5-
<title>performance.Descriptions-20250408-125836</title>
5+
<title>performance.Descriptions-20260819-175616</title>
66

77
<style type="text/css">
88
table { border-collapse: collapse; display: block; width: 100%; overflow: auto; }
@@ -13,11 +13,11 @@
1313
</head>
1414
<body>
1515
<pre><code>
16-
BenchmarkDotNet v0.14.0, Windows 11 (10.0.26100.3476)
17-
11th Gen Intel Core i7-1185G7 3.00GHz, 1 CPU, 8 logical and 4 physical cores
18-
.NET SDK 9.0.202
19-
[Host] : .NET 8.0.14 (8.0.1425.11118), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
20-
ShortRun : .NET 8.0.14 (8.0.1425.11118), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
16+
BenchmarkDotNet v0.14.0, Ubuntu 24.04.4 LTS (Noble Numbat)
17+
AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores
18+
.NET SDK 10.0.302
19+
[Host] : .NET 8.0.30 (8.0.3026.36720), X64 RyuJIT AVX2
20+
ShortRun : .NET 8.0.30 (8.0.3026.36720), X64 RyuJIT AVX2
2121
</code></pre>
2222
<pre><code>Job=ShortRun IterationCount=3 LaunchCount=1
2323
WarmupCount=3
@@ -26,10 +26,10 @@
2626
<table>
2727
<thead><tr><th>Method</th><th>Mean </th><th>Error </th><th>StdDev</th><th>Gen0</th><th>Gen1</th><th>Gen2</th><th>Allocated</th>
2828
</tr>
29-
</thead><tbody><tr><td>PetStoreYaml</td><td>448.7 &mu;s</td><td>326.6 &mu;s</td><td>17.90 &mu;s</td><td>58.5938</td><td>11.7188</td><td>-</td><td>381.79 KB</td>
30-
</tr><tr><td>PetStoreJson</td><td>484.8 &mu;s</td><td>156.9 &mu;s</td><td>8.60 &mu;s</td><td>62.5000</td><td>15.6250</td><td>-</td><td>389.28 KB</td>
31-
</tr><tr><td>GHESYaml</td><td>1,008,349.6 &mu;s</td><td>565,392.0 &mu;s</td><td>30,991.04 &mu;s</td><td>66000.0000</td><td>23000.0000</td><td>4000.0000</td><td>382785 KB</td>
32-
</tr><tr><td>GHESJson</td><td>1,039,447.0 &mu;s</td><td>267,501.0 &mu;s</td><td>14,662.63 &mu;s</td><td>67000.0000</td><td>23000.0000</td><td>4000.0000</td><td>389970.77 KB</td>
29+
</thead><tbody><tr><td>PetStoreYaml</td><td>750.3 &mu;s</td><td>320.4 &mu;s</td><td>17.56 &mu;s</td><td>23.4375</td><td>3.9063</td><td>-</td><td>438.94 KB</td>
30+
</tr><tr><td>PetStoreJson</td><td>875.7 &mu;s</td><td>167.0 &mu;s</td><td>9.15 &mu;s</td><td>25.3906</td><td>1.9531</td><td>-</td><td>446.38 KB</td>
31+
</tr><tr><td>GHESYaml</td><td>1,775,302.8 &mu;s</td><td>137,608.1 &mu;s</td><td>7,542.76 &mu;s</td><td>30000.0000</td><td>23000.0000</td><td>4000.0000</td><td>438624.06 KB</td>
32+
</tr><tr><td>GHESJson</td><td>1,924,124.8 &mu;s</td><td>514,004.3 &mu;s</td><td>28,174.31 &mu;s</td><td>30000.0000</td><td>23000.0000</td><td>4000.0000</td><td>445806.12 KB</td>
3333
</tr></tbody></table>
3434
</body>
3535
</html>

performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.
Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,42 @@
11
```
22
3-
BenchmarkDotNet v0.14.0, Windows 11 (10.0.26100.3476)
4-
11th Gen Intel Core i7-1185G7 3.00GHz, 1 CPU, 8 logical and 4 physical cores
5-
.NET SDK 9.0.202
6-
[Host] : .NET 8.0.14 (8.0.1425.11118), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
7-
ShortRun : .NET 8.0.14 (8.0.1425.11118), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
3+
BenchmarkDotNet v0.14.0, Ubuntu 24.04.4 LTS (Noble Numbat)
4+
AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores
5+
.NET SDK 10.0.302
6+
[Host] : .NET 8.0.30 (8.0.3026.36720), X64 RyuJIT AVX2
7+
ShortRun : .NET 8.0.30 (8.0.3026.36720), X64 RyuJIT AVX2
88
99
Job=ShortRun IterationCount=3 LaunchCount=1
1010
WarmupCount=3
1111
1212
```
13-
| Method | Mean | Error | StdDev | Gen0 | Gen1 | Allocated |
14-
|---------------------------- |-----------:|-----------:|----------:|-------:|-------:|----------:|
15-
| EmptyApiCallback | 31.519 ns | 38.4672 ns | 2.1085 ns | 0.0331 | - | 208 B |
16-
| EmptyApiComponents | 140.512 ns | 14.3041 ns | 0.7841 ns | 0.1428 | 0.0002 | 896 B |
17-
| EmptyApiContact | 16.055 ns | 1.3280 ns | 0.0728 ns | 0.0204 | - | 128 B |
18-
| EmptyApiDiscriminator | 15.220 ns | 4.7792 ns | 0.2620 ns | 0.0179 | - | 112 B |
19-
| EmptyDocument | 29.049 ns | 3.8422 ns | 0.2106 ns | 0.0433 | - | 272 B |
20-
| EmptyApiEncoding | 33.103 ns | 57.7474 ns | 3.1653 ns | 0.0344 | - | 216 B |
21-
| EmptyApiExample | 16.734 ns | 3.4981 ns | 0.1917 ns | 0.0242 | - | 152 B |
22-
| EmptyApiExternalDocs | 16.954 ns | 1.2380 ns | 0.0679 ns | 0.0191 | - | 120 B |
23-
| EmptyApiHeader | 43.507 ns | 2.5086 ns | 0.1375 ns | 0.0523 | - | 328 B |
24-
| EmptyApiInfo | 16.481 ns | 0.3538 ns | 0.0194 ns | 0.0242 | - | 152 B |
25-
| EmptyApiLicense | 17.546 ns | 3.3792 ns | 0.1852 ns | 0.0191 | - | 120 B |
26-
| EmptyApiLink | 31.159 ns | 2.9456 ns | 0.1615 ns | 0.0395 | - | 248 B |
27-
| EmptyApiMediaType | 48.673 ns | 40.1509 ns | 2.2008 ns | 0.0471 | - | 296 B |
28-
| EmptyApiOAuthFlow | 31.660 ns | 6.6152 ns | 0.3626 ns | 0.0344 | - | 216 B |
29-
| EmptyApiOAuthFlows | 16.520 ns | 8.7989 ns | 0.4823 ns | 0.0217 | - | 136 B |
30-
| EmptyApiOperation | 74.102 ns | 5.9538 ns | 0.3263 ns | 0.0930 | - | 584 B |
31-
| EmptyApiParameter | 44.586 ns | 25.6169 ns | 1.4041 ns | 0.0548 | - | 344 B |
32-
| EmptyApiPathItem | 32.387 ns | 15.2578 ns | 0.8363 ns | 0.0485 | - | 304 B |
33-
| EmptyApiPaths | 34.939 ns | 23.7764 ns | 1.3033 ns | 0.0268 | - | 168 B |
34-
| EmptyApiRequestBody | 33.944 ns | 16.6503 ns | 0.9127 ns | 0.0344 | - | 216 B |
35-
| EmptyApiResponse | 59.113 ns | 32.6796 ns | 1.7913 ns | 0.0625 | - | 392 B |
36-
| EmptyApiResponses | 27.691 ns | 4.1005 ns | 0.2248 ns | 0.0268 | - | 168 B |
37-
| EmptyApiSchema | 67.181 ns | 76.4118 ns | 4.1884 ns | 0.1109 | 0.0002 | 696 B |
38-
| EmptyApiSecurityRequirement | 8.867 ns | 7.3926 ns | 0.4052 ns | 0.0166 | - | 104 B |
39-
| EmptyApiSecurityScheme | 18.258 ns | 7.2938 ns | 0.3998 ns | 0.0280 | - | 176 B |
40-
| EmptyApiServer | 30.928 ns | 6.3259 ns | 0.3467 ns | 0.0331 | - | 208 B |
41-
| EmptyApiServerVariable | 17.401 ns | 1.4698 ns | 0.0806 ns | 0.0204 | - | 128 B |
42-
| EmptyApiTag | 17.470 ns | 17.4659 ns | 0.9574 ns | 0.0229 | - | 144 B |
13+
| Method | Mean | Error | StdDev | Gen0 | Allocated |
14+
|---------------------------- |----------:|----------:|---------:|-------:|----------:|
15+
| EmptyApiCallback | 48.71 ns | 13.702 ns | 0.751 ns | 0.0124 | 208 B |
16+
| EmptyApiComponents | 226.57 ns | 45.828 ns | 2.512 ns | 0.0534 | 896 B |
17+
| EmptyApiContact | 29.46 ns | 3.469 ns | 0.190 ns | 0.0076 | 128 B |
18+
| EmptyApiDiscriminator | 28.54 ns | 9.155 ns | 0.502 ns | 0.0067 | 112 B |
19+
| EmptyDocument | 60.29 ns | 16.830 ns | 0.923 ns | 0.0162 | 272 B |
20+
| EmptyApiEncoding | 51.10 ns | 14.399 ns | 0.789 ns | 0.0129 | 216 B |
21+
| EmptyApiExample | 31.99 ns | 7.352 ns | 0.403 ns | 0.0091 | 152 B |
22+
| EmptyApiExternalDocs | 32.39 ns | 5.356 ns | 0.294 ns | 0.0072 | 120 B |
23+
| EmptyApiHeader | 76.36 ns | 32.340 ns | 1.773 ns | 0.0196 | 328 B |
24+
| EmptyApiInfo | 30.61 ns | 4.565 ns | 0.250 ns | 0.0091 | 152 B |
25+
| EmptyApiLicense | 28.90 ns | 7.119 ns | 0.390 ns | 0.0072 | 120 B |
26+
| EmptyApiLink | 52.01 ns | 11.111 ns | 0.609 ns | 0.0148 | 248 B |
27+
| EmptyApiMediaType | 73.56 ns | 5.497 ns | 0.301 ns | 0.0176 | 296 B |
28+
| EmptyApiOAuthFlow | 50.64 ns | 22.684 ns | 1.243 ns | 0.0129 | 216 B |
29+
| EmptyApiOAuthFlows | 32.67 ns | 6.929 ns | 0.380 ns | 0.0081 | 136 B |
30+
| EmptyApiOperation | 136.86 ns | 58.824 ns | 3.224 ns | 0.0348 | 584 B |
31+
| EmptyApiParameter | 75.91 ns | 20.049 ns | 1.099 ns | 0.0205 | 344 B |
32+
| EmptyApiPathItem | 63.50 ns | 19.078 ns | 1.046 ns | 0.0181 | 304 B |
33+
| EmptyApiPaths | 42.65 ns | 15.564 ns | 0.853 ns | 0.0100 | 168 B |
34+
| EmptyApiRequestBody | 59.87 ns | 15.210 ns | 0.834 ns | 0.0129 | 216 B |
35+
| EmptyApiResponse | 92.62 ns | 27.756 ns | 1.521 ns | 0.0234 | 392 B |
36+
| EmptyApiResponses | 42.38 ns | 2.652 ns | 0.145 ns | 0.0100 | 168 B |
37+
| EmptyApiSchema | 124.10 ns | 46.460 ns | 2.547 ns | 0.0415 | 696 B |
38+
| EmptyApiSecurityRequirement | 18.20 ns | 3.986 ns | 0.218 ns | 0.0062 | 104 B |
39+
| EmptyApiSecurityScheme | 32.71 ns | 3.952 ns | 0.217 ns | 0.0105 | 176 B |
40+
| EmptyApiServer | 55.11 ns | 29.756 ns | 1.631 ns | 0.0124 | 208 B |
41+
| EmptyApiServerVariable | 29.69 ns | 4.348 ns | 0.238 ns | 0.0076 | 128 B |
42+
| EmptyApiTag | 30.84 ns | 15.907 ns | 0.872 ns | 0.0086 | 144 B |

0 commit comments

Comments
 (0)