Conversation
There was a problem hiding this comment.
Pull request overview
This PR introduces CSAF validation 6.3.7 (“Use of Self Referencing URLs Failing to Resolve”), including feature-gated external HTTP checking, plus new reference-vector convenience helpers for document and vulnerability reference filtering.
Changes:
- Adds
ReferenceVecTraitand convenience methods onDocumentTrait/VulnerabilityTraitto fetch self/external references with original indices. - Introduces feature-gated (
external-connections) implementation for test 6.3.7, including URL defanging and aureq-based HEAD status helper. - Wires test 6.3.7 into CSAF 2.0 and 2.1 validation dispatch and adds the optional
ureqdependency + lockfile updates.
Reviewed changes
Copilot reviewed 10 out of 11 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| csaf-rs/src/validations/test_6_3_07_stub.rs | Adds a stubbed 6.3.7 validator for builds without external connectivity. |
| csaf-rs/src/validations/test_6_3_07_impl.rs | Adds the feature-gated 6.3.7 implementation performing URL resolution checks and tests. |
| csaf-rs/src/validations/mod.rs | Selects stub vs impl module based on the external-connections feature and re-exports as test_6_3_07. |
| csaf-rs/src/helpers.rs | Adds defang_url and get_status_code (feature-gated) helper utilities. |
| csaf-rs/src/csaf2_1/validation.rs | Enables running validator 6.3.7 in the 2.1 validation dispatcher. |
| csaf-rs/src/csaf2_0/validation.rs | Enables running validator 6.3.7 in the 2.0 validation dispatcher. |
| csaf-rs/src/csaf/traits/vulnerabilities_trait.rs | Adds self/external reference convenience methods; tightens associated type bound. |
| csaf-rs/src/csaf/traits/shared/references_trait.rs | Introduces ReferenceVecTrait and implements it for CSAF 2.0/2.1 reference types. |
| csaf-rs/src/csaf/traits/document_trait.rs | Adds self/external reference convenience methods; tightens associated type bound. |
| csaf-rs/Cargo.toml | Adds external-connections feature and optional ureq dependency. |
| Cargo.lock | Updates lockfile for ureq and transitive dependencies. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
CSAF Validation Benchmark
Details
| Benchmark suite | Current: 43eafa7 | Previous: aae8a48 | Ratio |
|---|---|---|---|
csaf_2_0_tests/6.1.1 |
125624 ns/iter (± 977) |
132186 ns/iter (± 276) |
0.95 |
csaf_2_0_tests/6.1.2 |
51038 ns/iter (± 84) |
53196 ns/iter (± 57) |
0.96 |
csaf_2_0_tests/6.1.3 |
13274 ns/iter (± 51) |
12949 ns/iter (± 351) |
1.03 |
csaf_2_0_tests/6.1.4 |
28449 ns/iter (± 1253) |
29284 ns/iter (± 150) |
0.97 |
csaf_2_0_tests/6.1.5 |
13647 ns/iter (± 182) |
14108 ns/iter (± 106) |
0.97 |
csaf_2_0_tests/6.1.6 |
40242 ns/iter (± 158) |
38396 ns/iter (± 53) |
1.05 |
csaf_2_0_tests/6.1.7 |
33370 ns/iter (± 1929) |
33853 ns/iter (± 57) |
0.99 |
csaf_2_0_tests/6.1.8 |
88355 ns/iter (± 425) |
91075 ns/iter (± 488) |
0.97 |
csaf_2_0_tests/6.1.9 |
65174 ns/iter (± 151) |
66494 ns/iter (± 128) |
0.98 |
csaf_2_0_tests/6.1.10 |
128370 ns/iter (± 355) |
130452 ns/iter (± 601) |
0.98 |
csaf_2_0_tests/6.1.11 |
14003 ns/iter (± 53) |
14210 ns/iter (± 9) |
0.99 |
csaf_2_0_tests/6.1.12 |
30401 ns/iter (± 22) |
28054 ns/iter (± 35) |
1.08 |
csaf_2_0_tests/6.1.13 |
32774 ns/iter (± 29) |
33306 ns/iter (± 254) |
0.98 |
csaf_2_0_tests/6.1.15 |
12476 ns/iter (± 20) |
13590 ns/iter (± 601) |
0.92 |
csaf_2_0_tests/6.1.16 |
49610 ns/iter (± 52) |
48618 ns/iter (± 285) |
1.02 |
csaf_2_0_tests/6.1.17 |
13763 ns/iter (± 16) |
13962 ns/iter (± 11) |
0.99 |
csaf_2_0_tests/6.1.18 |
16258 ns/iter (± 29) |
16527 ns/iter (± 28) |
0.98 |
csaf_2_0_tests/6.1.19 |
16105 ns/iter (± 289) |
16418 ns/iter (± 140) |
0.98 |
csaf_2_0_tests/6.1.20 |
13314 ns/iter (± 20) |
13723 ns/iter (± 21) |
0.97 |
csaf_2_0_tests/6.1.21 |
54353 ns/iter (± 76) |
52334 ns/iter (± 63) |
1.04 |
csaf_2_0_tests/6.1.22 |
63814 ns/iter (± 4592) |
60901 ns/iter (± 141) |
1.05 |
csaf_2_0_tests/6.1.23 |
16012 ns/iter (± 14) |
16185 ns/iter (± 23) |
0.99 |
csaf_2_0_tests/6.1.24 |
15484 ns/iter (± 112) |
17815 ns/iter (± 70) |
0.87 |
csaf_2_0_tests/6.1.25 |
36593 ns/iter (± 64) |
36421 ns/iter (± 55) |
1.00 |
csaf_2_0_tests/6.1.26 |
20412 ns/iter (± 94) |
20182 ns/iter (± 30) |
1.01 |
csaf_2_0_tests/6.1.27.1 |
13616 ns/iter (± 126) |
13162 ns/iter (± 28) |
1.03 |
csaf_2_0_tests/6.1.27.2 |
12683 ns/iter (± 19) |
12484 ns/iter (± 8) |
1.02 |
csaf_2_0_tests/6.1.27.3 |
13367 ns/iter (± 14) |
13004 ns/iter (± 80) |
1.03 |
csaf_2_0_tests/6.1.27.4 |
14188 ns/iter (± 204) |
13143 ns/iter (± 12) |
1.08 |
csaf_2_0_tests/6.1.27.5 |
14067 ns/iter (± 10) |
13923 ns/iter (± 52) |
1.01 |
csaf_2_0_tests/6.1.27.6 |
13710 ns/iter (± 12) |
13411 ns/iter (± 17) |
1.02 |
csaf_2_0_tests/6.1.27.7 |
13087 ns/iter (± 56) |
12686 ns/iter (± 102) |
1.03 |
csaf_2_0_tests/6.1.27.8 |
12774 ns/iter (± 16) |
12541 ns/iter (± 7) |
1.02 |
csaf_2_0_tests/6.1.27.9 |
25741 ns/iter (± 46) |
25510 ns/iter (± 60) |
1.01 |
csaf_2_0_tests/6.1.27.10 |
14202 ns/iter (± 80) |
14468 ns/iter (± 493) |
0.98 |
csaf_2_0_tests/6.1.27.11 |
13228 ns/iter (± 14) |
12992 ns/iter (± 9) |
1.02 |
csaf_2_0_tests/6.1.28 |
24470 ns/iter (± 23) |
22801 ns/iter (± 73) |
1.07 |
csaf_2_0_tests/6.1.29 |
12559 ns/iter (± 18) |
12922 ns/iter (± 106) |
0.97 |
csaf_2_0_tests/6.1.30 |
45784 ns/iter (± 85) |
43847 ns/iter (± 89) |
1.04 |
csaf_2_0_tests/6.1.31 |
34915 ns/iter (± 74) |
36689 ns/iter (± 349) |
0.95 |
csaf_2_0_tests/6.1.32 |
12735 ns/iter (± 31) |
13193 ns/iter (± 329) |
0.97 |
csaf_2_0_tests/6.1.33 |
19679 ns/iter (± 37) |
20028 ns/iter (± 29) |
0.98 |
csaf_2_0_tests/6.2.1 |
150184 ns/iter (± 214) |
160443 ns/iter (± 5024) |
0.94 |
csaf_2_0_tests/6.2.2 |
21134 ns/iter (± 44) |
21694 ns/iter (± 78) |
0.97 |
csaf_2_0_tests/6.2.3 |
20401 ns/iter (± 47) |
20856 ns/iter (± 62) |
0.98 |
csaf_2_0_tests/6.2.4 |
20007 ns/iter (± 33) |
21079 ns/iter (± 253) |
0.95 |
csaf_2_0_tests/6.2.5 |
61030 ns/iter (± 54) |
60136 ns/iter (± 195) |
1.01 |
csaf_2_0_tests/6.2.6 |
61859 ns/iter (± 65) |
60477 ns/iter (± 137) |
1.02 |
csaf_2_0_tests/6.2.7 |
17389 ns/iter (± 12) |
17602 ns/iter (± 22) |
0.99 |
csaf_2_0_tests/6.2.8 |
37627 ns/iter (± 25) |
39360 ns/iter (± 169) |
0.96 |
csaf_2_0_tests/6.2.9 |
37995 ns/iter (± 44) |
38911 ns/iter (± 47) |
0.98 |
csaf_2_0_tests/6.2.10 |
28466 ns/iter (± 42) |
30010 ns/iter (± 56) |
0.95 |
csaf_2_0_tests/6.2.11 |
155507 ns/iter (± 586) |
149393 ns/iter (± 126) |
1.04 |
csaf_2_0_tests/6.2.12 |
35241 ns/iter (± 208) |
36745 ns/iter (± 95) |
0.96 |
csaf_2_0_tests/6.2.13 |
783548 ns/iter (± 7826) |
834195 ns/iter (± 5452) |
0.94 |
csaf_2_0_tests/6.2.14 |
45153 ns/iter (± 120) |
44687 ns/iter (± 88) |
1.01 |
csaf_2_0_tests/6.2.15 |
36001 ns/iter (± 32) |
35871 ns/iter (± 180) |
1.00 |
csaf_2_0_tests/6.2.16 |
45283 ns/iter (± 110) |
46923 ns/iter (± 165) |
0.97 |
csaf_2_0_tests/6.2.17 |
17787 ns/iter (± 15) |
18519 ns/iter (± 113) |
0.96 |
csaf_2_0_tests/6.2.18 |
28513 ns/iter (± 142) |
30406 ns/iter (± 35) |
0.94 |
csaf_2_0_tests/6.2.19 |
21279 ns/iter (± 26) |
21660 ns/iter (± 17) |
0.98 |
csaf_2_0_tests/6.2.20 |
1672330 ns/iter (± 2594) |
1738633 ns/iter (± 2813) |
0.96 |
csaf_2_0_tests/6.3.1 |
44115 ns/iter (± 50) |
44415 ns/iter (± 140) |
0.99 |
csaf_2_0_tests/6.3.2 |
28356 ns/iter (± 39) |
30019 ns/iter (± 65) |
0.94 |
csaf_2_0_tests/6.3.3 |
28444 ns/iter (± 49) |
28723 ns/iter (± 57) |
0.99 |
csaf_2_0_tests/6.3.4 |
35150 ns/iter (± 47) |
35817 ns/iter (± 115) |
0.98 |
csaf_2_0_tests/6.3.5 |
44495 ns/iter (± 69) |
45008 ns/iter (± 57) |
0.99 |
csaf_2_0_tests/6.3.6 |
21033 ns/iter (± 17) |
21170 ns/iter (± 24) |
0.99 |
csaf_2_0_tests/6.3.7 |
20958 ns/iter (± 23) |
21153 ns/iter (± 15) |
0.99 |
csaf_2_0_tests/6.3.8 |
20808 ns/iter (± 133) |
21186 ns/iter (± 18) |
0.98 |
csaf_2_0_tests/6.3.9 |
36215 ns/iter (± 55) |
37111 ns/iter (± 62) |
0.98 |
csaf_2_0_tests/6.3.10 |
32459 ns/iter (± 40) |
33975 ns/iter (± 76) |
0.96 |
csaf_2_0_tests/6.3.11 |
33966 ns/iter (± 39) |
35708 ns/iter (± 95) |
0.95 |
csaf_2_1_tests/6.1.1 |
648058 ns/iter (± 2064) |
655342 ns/iter (± 752) |
0.99 |
csaf_2_1_tests/6.1.2 |
263485 ns/iter (± 665) |
261985 ns/iter (± 390) |
1.01 |
csaf_2_1_tests/6.1.3 |
77099 ns/iter (± 328) |
72934 ns/iter (± 201) |
1.06 |
csaf_2_1_tests/6.1.4 |
131605 ns/iter (± 651) |
131873 ns/iter (± 497) |
1.00 |
csaf_2_1_tests/6.1.5 |
49714 ns/iter (± 39) |
50165 ns/iter (± 1497) |
0.99 |
csaf_2_1_tests/6.1.6 |
122894 ns/iter (± 754) |
117702 ns/iter (± 608) |
1.04 |
csaf_2_1_tests/6.1.7 |
74578 ns/iter (± 108) |
76378 ns/iter (± 397) |
0.98 |
csaf_2_1_tests/6.1.8 |
104889 ns/iter (± 7324) |
76636 ns/iter (± 59) |
1.37 |
csaf_2_1_tests/6.1.9 |
508479 ns/iter (± 1587) |
503341 ns/iter (± 10760) |
1.01 |
csaf_2_1_tests/6.1.10 |
637478 ns/iter (± 1246) |
652028 ns/iter (± 2055) |
0.98 |
csaf_2_1_tests/6.1.11 |
81689 ns/iter (± 197) |
84852 ns/iter (± 176) |
0.96 |
csaf_2_1_tests/6.1.12 |
85770 ns/iter (± 637) |
83954 ns/iter (± 791) |
1.02 |
csaf_2_1_tests/6.1.13 |
198904 ns/iter (± 442) |
206957 ns/iter (± 640) |
0.96 |
csaf_2_1_tests/6.1.15 |
43774 ns/iter (± 48) |
44529 ns/iter (± 54) |
0.98 |
csaf_2_1_tests/6.1.16 |
164303 ns/iter (± 449) |
170826 ns/iter (± 348) |
0.96 |
csaf_2_1_tests/6.1.17 |
48332 ns/iter (± 123) |
51857 ns/iter (± 2208) |
0.93 |
csaf_2_1_tests/6.1.18 |
54198 ns/iter (± 311) |
60416 ns/iter (± 137) |
0.90 |
csaf_2_1_tests/6.1.19 |
54133 ns/iter (± 137) |
58332 ns/iter (± 150) |
0.93 |
csaf_2_1_tests/6.1.20 |
48106 ns/iter (± 52) |
49679 ns/iter (± 360) |
0.97 |
csaf_2_1_tests/6.1.21 |
176848 ns/iter (± 415) |
184696 ns/iter (± 469) |
0.96 |
csaf_2_1_tests/6.1.22 |
201576 ns/iter (± 1337) |
197382 ns/iter (± 269) |
1.02 |
csaf_2_1_tests/6.1.23 |
54513 ns/iter (± 108) |
55414 ns/iter (± 373) |
0.98 |
csaf_2_1_tests/6.1.24 |
51148 ns/iter (± 102) |
54267 ns/iter (± 922) |
0.94 |
csaf_2_1_tests/6.1.25 |
174392 ns/iter (± 687) |
176863 ns/iter (± 156) |
0.99 |
csaf_2_1_tests/6.1.26 |
73402 ns/iter (± 112) |
75204 ns/iter (± 101) |
0.98 |
csaf_2_1_tests/6.1.27.1 |
49508 ns/iter (± 64) |
48884 ns/iter (± 136) |
1.01 |
csaf_2_1_tests/6.1.27.2 |
47057 ns/iter (± 50) |
46189 ns/iter (± 178) |
1.02 |
csaf_2_1_tests/6.1.27.3 |
49656 ns/iter (± 58) |
51735 ns/iter (± 83) |
0.96 |
csaf_2_1_tests/6.1.27.4 |
51622 ns/iter (± 704) |
49962 ns/iter (± 58) |
1.03 |
csaf_2_1_tests/6.1.27.5 |
50549 ns/iter (± 130) |
50475 ns/iter (± 209) |
1.00 |
csaf_2_1_tests/6.1.27.6 |
50977 ns/iter (± 60) |
49904 ns/iter (± 172) |
1.02 |
csaf_2_1_tests/6.1.27.7 |
47401 ns/iter (± 43) |
46800 ns/iter (± 487) |
1.01 |
csaf_2_1_tests/6.1.27.8 |
47472 ns/iter (± 39) |
46866 ns/iter (± 77) |
1.01 |
csaf_2_1_tests/6.1.27.9 |
69981 ns/iter (± 109) |
67894 ns/iter (± 540) |
1.03 |
csaf_2_1_tests/6.1.27.10 |
50400 ns/iter (± 105) |
47990 ns/iter (± 78) |
1.05 |
csaf_2_1_tests/6.1.27.11 |
50605 ns/iter (± 59) |
49140 ns/iter (± 164) |
1.03 |
csaf_2_1_tests/6.1.27.12 |
49869 ns/iter (± 294) |
49083 ns/iter (± 27) |
1.02 |
csaf_2_1_tests/6.1.27.13 |
73372 ns/iter (± 59) |
72673 ns/iter (± 1031) |
1.01 |
csaf_2_1_tests/6.1.27.14 |
51106 ns/iter (± 43) |
49440 ns/iter (± 62) |
1.03 |
csaf_2_1_tests/6.1.27.15 |
50218 ns/iter (± 226) |
49559 ns/iter (± 48) |
1.01 |
csaf_2_1_tests/6.1.27.16 |
50268 ns/iter (± 284) |
49738 ns/iter (± 189) |
1.01 |
csaf_2_1_tests/6.1.27.17 |
53863 ns/iter (± 110) |
55015 ns/iter (± 57) |
0.98 |
csaf_2_1_tests/6.1.27.18 |
56575 ns/iter (± 416) |
55506 ns/iter (± 59) |
1.02 |
csaf_2_1_tests/6.1.27.19 |
52675 ns/iter (± 322) |
52637 ns/iter (± 186) |
1.00 |
csaf_2_1_tests/6.1.28 |
73122 ns/iter (± 98) |
70620 ns/iter (± 64) |
1.04 |
csaf_2_1_tests/6.1.29 |
55504 ns/iter (± 95) |
48730 ns/iter (± 1337) |
1.14 |
csaf_2_1_tests/6.1.30 |
154026 ns/iter (± 6182) |
164870 ns/iter (± 387) |
0.93 |
csaf_2_1_tests/6.1.31 |
174201 ns/iter (± 503) |
177677 ns/iter (± 781) |
0.98 |
csaf_2_1_tests/6.1.32 |
47973 ns/iter (± 133) |
48837 ns/iter (± 1169) |
0.98 |
csaf_2_1_tests/6.1.33 |
87468 ns/iter (± 200) |
90225 ns/iter (± 298) |
0.97 |
csaf_2_1_tests/6.1.34 |
58716 ns/iter (± 127) |
60199 ns/iter (± 143) |
0.98 |
csaf_2_1_tests/6.1.35 |
82070 ns/iter (± 103) |
81373 ns/iter (± 215) |
1.01 |
csaf_2_1_tests/6.1.36 |
88667 ns/iter (± 294) |
90507 ns/iter (± 118) |
0.98 |
csaf_2_1_tests/6.1.37 |
88613 ns/iter (± 102) |
90801 ns/iter (± 709) |
0.98 |
csaf_2_1_tests/6.1.38 |
48377 ns/iter (± 65) |
47735 ns/iter (± 86) |
1.01 |
csaf_2_1_tests/6.1.39 |
51930 ns/iter (± 197) |
50016 ns/iter (± 78) |
1.04 |
csaf_2_1_tests/6.1.40 |
48761 ns/iter (± 57) |
48636 ns/iter (± 256) |
1.00 |
csaf_2_1_tests/6.1.41 |
49093 ns/iter (± 59) |
49206 ns/iter (± 420) |
1.00 |
csaf_2_1_tests/6.1.42 |
206737 ns/iter (± 509) |
212216 ns/iter (± 420) |
0.97 |
csaf_2_1_tests/6.1.43 |
170247 ns/iter (± 7399) |
179585 ns/iter (± 430) |
0.95 |
csaf_2_1_tests/6.1.44 |
170856 ns/iter (± 1516) |
183117 ns/iter (± 565) |
0.93 |
csaf_2_1_tests/6.1.45 |
172748 ns/iter (± 313) |
168818 ns/iter (± 516) |
1.02 |
csaf_2_1_tests/6.1.46 |
276009 ns/iter (± 913) |
273973 ns/iter (± 1305) |
1.01 |
csaf_2_1_tests/6.1.47 |
418236 ns/iter (± 533) |
422439 ns/iter (± 949) |
0.99 |
csaf_2_1_tests/6.1.48 |
91808 ns/iter (± 335) |
94229 ns/iter (± 145) |
0.97 |
csaf_2_1_tests/6.1.49 |
91965 ns/iter (± 124) |
98849 ns/iter (± 157) |
0.93 |
csaf_2_1_tests/6.1.50 |
92265 ns/iter (± 132) |
94828 ns/iter (± 485) |
0.97 |
csaf_2_1_tests/6.1.51 |
177977 ns/iter (± 211) |
177988 ns/iter (± 221) |
1.00 |
csaf_2_1_tests/6.1.52 |
180607 ns/iter (± 315) |
182852 ns/iter (± 895) |
0.99 |
csaf_2_1_tests/6.1.53 |
57501 ns/iter (± 117) |
60552 ns/iter (± 823) |
0.95 |
csaf_2_1_tests/6.1.54 |
67086 ns/iter (± 112) |
67577 ns/iter (± 112) |
0.99 |
csaf_2_1_tests/6.1.55 |
67748 ns/iter (± 77) |
68298 ns/iter (± 118) |
0.99 |
csaf_2_1_tests/6.1.56 |
98034 ns/iter (± 181) |
100184 ns/iter (± 1978) |
0.98 |
csaf_2_1_tests/6.1.57 |
137570 ns/iter (± 202) |
135759 ns/iter (± 1655) |
1.01 |
csaf_2_1_tests/6.1.58 |
89543 ns/iter (± 410) |
93889 ns/iter (± 483) |
0.95 |
csaf_2_1_tests/6.1.59 |
95598 ns/iter (± 119) |
98244 ns/iter (± 99) |
0.97 |
csaf_2_1_tests/6.1.60.1 |
74042 ns/iter (± 445) |
73791 ns/iter (± 38) |
1.00 |
csaf_2_1_tests/6.1.60.2 |
74301 ns/iter (± 277) |
74641 ns/iter (± 170) |
1.00 |
csaf_2_1_tests/6.1.60.3 |
74563 ns/iter (± 656) |
74621 ns/iter (± 266) |
1.00 |
csaf_2_1_tests/6.1.61 |
175325 ns/iter (± 456) |
186118 ns/iter (± 347) |
0.94 |
csaf_2_1_tests/6.2.1 |
725711 ns/iter (± 2050) |
731797 ns/iter (± 3125) |
0.99 |
csaf_2_1_tests/6.2.2 |
81939 ns/iter (± 93) |
84402 ns/iter (± 306) |
0.97 |
csaf_2_1_tests/6.2.3 |
76671 ns/iter (± 193) |
80487 ns/iter (± 517) |
0.95 |
csaf_2_1_tests/6.2.4 |
68631 ns/iter (± 6828) |
73732 ns/iter (± 127) |
0.93 |
csaf_2_1_tests/6.2.5 |
205033 ns/iter (± 862) |
218300 ns/iter (± 383) |
0.94 |
csaf_2_1_tests/6.2.6 |
210150 ns/iter (± 7623) |
225696 ns/iter (± 386) |
0.93 |
csaf_2_1_tests/6.2.7 |
63646 ns/iter (± 835) |
64492 ns/iter (± 635) |
0.99 |
csaf_2_1_tests/6.2.8 |
186109 ns/iter (± 263) |
189962 ns/iter (± 658) |
0.98 |
csaf_2_1_tests/6.2.9 |
183398 ns/iter (± 458) |
191943 ns/iter (± 758) |
0.96 |
csaf_2_1_tests/6.2.11 |
593012 ns/iter (± 4544) |
563969 ns/iter (± 2629) |
1.05 |
csaf_2_1_tests/6.2.12 |
128082 ns/iter (± 284) |
130815 ns/iter (± 200) |
0.98 |
csaf_2_1_tests/6.2.13 |
3684578 ns/iter (± 16289) |
3803278 ns/iter (± 29820) |
0.97 |
csaf_2_1_tests/6.2.14 |
130164 ns/iter (± 159) |
129557 ns/iter (± 1928) |
1.00 |
csaf_2_1_tests/6.2.15 |
112618 ns/iter (± 185) |
113822 ns/iter (± 582) |
0.99 |
csaf_2_1_tests/6.2.16 |
221761 ns/iter (± 573) |
240187 ns/iter (± 392) |
0.92 |
csaf_2_1_tests/6.2.17 |
81406 ns/iter (± 102) |
79747 ns/iter (± 2139) |
1.02 |
csaf_2_1_tests/6.2.18 |
154556 ns/iter (± 171) |
164588 ns/iter (± 4354) |
0.94 |
csaf_2_1_tests/6.2.19 |
86049 ns/iter (± 992) |
87507 ns/iter (± 276) |
0.98 |
csaf_2_1_tests/6.2.20 |
8979862 ns/iter (± 20067) |
9140977 ns/iter (± 25516) |
0.98 |
csaf_2_1_tests/6.2.21 |
369352 ns/iter (± 2439) |
369492 ns/iter (± 1062) |
1.00 |
csaf_2_1_tests/6.2.22 |
169533 ns/iter (± 342) |
177456 ns/iter (± 909) |
0.96 |
csaf_2_1_tests/6.2.23 |
87576 ns/iter (± 276) |
93923 ns/iter (± 777) |
0.93 |
csaf_2_1_tests/6.2.24 |
245284 ns/iter (± 318) |
239866 ns/iter (± 7592) |
1.02 |
csaf_2_1_tests/6.2.25 |
89809 ns/iter (± 333) |
92971 ns/iter (± 1954) |
0.97 |
csaf_2_1_tests/6.2.26 |
89779 ns/iter (± 481) |
97573 ns/iter (± 969) |
0.92 |
csaf_2_1_tests/6.2.27 |
87739 ns/iter (± 243) |
90427 ns/iter (± 65) |
0.97 |
csaf_2_1_tests/6.2.28 |
82752 ns/iter (± 115) |
75791 ns/iter (± 299) |
1.09 |
csaf_2_1_tests/6.2.29 |
74588 ns/iter (± 150) |
76260 ns/iter (± 1278) |
0.98 |
csaf_2_1_tests/6.2.30 |
75229 ns/iter (± 112) |
77101 ns/iter (± 59) |
0.98 |
csaf_2_1_tests/6.2.31 |
219393 ns/iter (± 15193) |
232374 ns/iter (± 363) |
0.94 |
csaf_2_1_tests/6.2.32 |
324134 ns/iter (± 795) |
353180 ns/iter (± 385) |
0.92 |
csaf_2_1_tests/6.2.33 |
240026 ns/iter (± 386) |
252167 ns/iter (± 346) |
0.95 |
csaf_2_1_tests/6.2.34 |
90777 ns/iter (± 357) |
92908 ns/iter (± 111) |
0.98 |
csaf_2_1_tests/6.2.35 |
90470 ns/iter (± 107) |
93337 ns/iter (± 139) |
0.97 |
csaf_2_1_tests/6.2.36 |
91834 ns/iter (± 314) |
93657 ns/iter (± 473) |
0.98 |
csaf_2_1_tests/6.2.37 |
92413 ns/iter (± 224) |
93430 ns/iter (± 106) |
0.99 |
csaf_2_1_tests/6.2.38 |
111235 ns/iter (± 704) |
104319 ns/iter (± 158) |
1.07 |
csaf_2_1_tests/6.2.39.1 |
74004 ns/iter (± 124) |
73746 ns/iter (± 48) |
1.00 |
csaf_2_1_tests/6.2.39.2 |
73984 ns/iter (± 95) |
73751 ns/iter (± 109) |
1.00 |
csaf_2_1_tests/6.2.39.3 |
73996 ns/iter (± 943) |
73806 ns/iter (± 292) |
1.00 |
csaf_2_1_tests/6.2.39.4 |
76780 ns/iter (± 536) |
73792 ns/iter (± 73) |
1.04 |
csaf_2_1_tests/6.2.39.5 |
75648 ns/iter (± 693) |
73837 ns/iter (± 142) |
1.02 |
csaf_2_1_tests/6.2.40 |
92351 ns/iter (± 258) |
94842 ns/iter (± 391) |
0.97 |
csaf_2_1_tests/6.2.41 |
205874 ns/iter (± 417) |
207799 ns/iter (± 664) |
0.99 |
csaf_2_1_tests/6.2.42 |
94255 ns/iter (± 232) |
95868 ns/iter (± 146) |
0.98 |
csaf_2_1_tests/6.2.43 |
94445 ns/iter (± 95) |
94826 ns/iter (± 122) |
1.00 |
csaf_2_1_tests/6.2.44 |
94096 ns/iter (± 1130) |
96221 ns/iter (± 253) |
0.98 |
csaf_2_1_tests/6.2.45 |
95492 ns/iter (± 152) |
96019 ns/iter (± 147) |
0.99 |
csaf_2_1_tests/6.2.46 |
95899 ns/iter (± 123) |
95410 ns/iter (± 262) |
1.01 |
csaf_2_1_tests/6.2.47 |
324999 ns/iter (± 980) |
319436 ns/iter (± 544) |
1.02 |
csaf_2_1_tests/6.2.48 |
170384 ns/iter (± 218) |
178859 ns/iter (± 325) |
0.95 |
csaf_2_1_tests/6.2.49 |
96835 ns/iter (± 485) |
96530 ns/iter (± 85) |
1.00 |
csaf_2_1_tests/6.2.50.1 |
74259 ns/iter (± 54) |
74574 ns/iter (± 72) |
1.00 |
csaf_2_1_tests/6.2.50.2 |
73940 ns/iter (± 73) |
73784 ns/iter (± 140) |
1.00 |
csaf_2_1_tests/6.2.50.3 |
73982 ns/iter (± 496) |
73764 ns/iter (± 84) |
1.00 |
csaf_2_1_tests/6.2.51 |
108416 ns/iter (± 331) |
103727 ns/iter (± 200) |
1.05 |
csaf_2_1_tests/6.2.52 |
205504 ns/iter (± 2549) |
216881 ns/iter (± 314) |
0.95 |
csaf_2_1_tests/6.2.53 |
86510 ns/iter (± 423) |
95468 ns/iter (± 2260) |
0.91 |
csaf_2_1_tests/6.2.54.1 |
76415 ns/iter (± 410) |
73756 ns/iter (± 61) |
1.04 |
csaf_2_1_tests/6.2.54.2 |
73974 ns/iter (± 230) |
73785 ns/iter (± 83) |
1.00 |
csaf_2_1_tests/6.2.54.3 |
74313 ns/iter (± 120) |
73847 ns/iter (± 1739) |
1.01 |
csaf_2_1_tests/6.2.54.4 |
73942 ns/iter (± 1391) |
73869 ns/iter (± 398) |
1.00 |
csaf_2_1_tests/6.3.1 |
76099 ns/iter (± 73) |
74988 ns/iter (± 160) |
1.01 |
csaf_2_1_tests/6.3.2 |
100397 ns/iter (± 309) |
104484 ns/iter (± 163) |
0.96 |
csaf_2_1_tests/6.3.3 |
76433 ns/iter (± 89) |
75137 ns/iter (± 112) |
1.02 |
csaf_2_1_tests/6.3.4 |
76404 ns/iter (± 89) |
76288 ns/iter (± 88) |
1.00 |
csaf_2_1_tests/6.3.5 |
76426 ns/iter (± 84) |
76272 ns/iter (± 78) |
1.00 |
csaf_2_1_tests/6.3.6 |
77057 ns/iter (± 618) |
76246 ns/iter (± 103) |
1.01 |
csaf_2_1_tests/6.3.7 |
76445 ns/iter (± 79) |
77300 ns/iter (± 316) |
0.99 |
csaf_2_1_tests/6.3.8 |
74684 ns/iter (± 716) |
77317 ns/iter (± 90) |
0.97 |
csaf_2_1_tests/6.3.9 |
188635 ns/iter (± 320) |
195718 ns/iter (± 453) |
0.96 |
csaf_2_1_tests/6.3.10 |
93642 ns/iter (± 115) |
97392 ns/iter (± 465) |
0.96 |
csaf_2_1_tests/6.3.11 |
93595 ns/iter (± 84) |
95555 ns/iter (± 116) |
0.98 |
csaf_2_1_tests/6.3.12 |
244563 ns/iter (± 340) |
256024 ns/iter (± 525) |
0.96 |
csaf_2_1_tests/6.3.13 |
94434 ns/iter (± 187) |
101650 ns/iter (± 86) |
0.93 |
csaf_2_1_tests/6.3.14 |
94648 ns/iter (± 209) |
96173 ns/iter (± 59) |
0.98 |
csaf_2_1_tests/6.3.15 |
95176 ns/iter (± 2460) |
97603 ns/iter (± 167) |
0.98 |
csaf_2_1_tests/6.3.16 |
96115 ns/iter (± 131) |
97778 ns/iter (± 653) |
0.98 |
csaf_2_1_tests/6.3.17 |
96452 ns/iter (± 175) |
98129 ns/iter (± 185) |
0.98 |
csaf_2_1_tests/6.3.18 |
106956 ns/iter (± 333) |
110197 ns/iter (± 144) |
0.97 |
csaf_2_1_tests/6.3.19.1 |
74020 ns/iter (± 530) |
73812 ns/iter (± 553) |
1.00 |
csaf_2_1_tests/6.3.19.2 |
74041 ns/iter (± 127) |
73875 ns/iter (± 471) |
1.00 |
csaf_2_1_tests/6.3.19.3 |
74355 ns/iter (± 770) |
74572 ns/iter (± 122) |
1.00 |
csaf_2_1_tests/6.3.19.4 |
75577 ns/iter (± 80) |
74225 ns/iter (± 442) |
1.02 |
csaf_2_1_tests/6.3.19.5 |
74002 ns/iter (± 430) |
74611 ns/iter (± 54) |
0.99 |
csaf_2_1_tests/6.3.20 |
105635 ns/iter (± 388) |
109434 ns/iter (± 145) |
0.97 |
csaf_2_1_tests/6.3.21.1 |
76747 ns/iter (± 3046) |
73795 ns/iter (± 64) |
1.04 |
csaf_2_1_tests/6.3.21.2 |
73966 ns/iter (± 335) |
73700 ns/iter (± 64) |
1.00 |
csaf_2_1_tests/6.3.21.3 |
73944 ns/iter (± 50) |
73792 ns/iter (± 141) |
1.00 |
csaf_2_1_tests/6.3.21.4 |
73997 ns/iter (± 177) |
74275 ns/iter (± 397) |
1.00 |
csaf_2_1_tests/6.3.21.5 |
75525 ns/iter (± 93) |
74591 ns/iter (± 249) |
1.01 |
csaf_2_1_tests/6.3.21.6 |
75228 ns/iter (± 42) |
73793 ns/iter (± 132) |
1.02 |
csaf_2_1_tests/6.3.21.7 |
75214 ns/iter (± 57) |
74658 ns/iter (± 6151) |
1.01 |
csaf_2_1_tests/6.3.21.8 |
73949 ns/iter (± 111) |
73800 ns/iter (± 121) |
1.00 |
csaf_2_1_tests/6.3.21.9 |
74061 ns/iter (± 103) |
73836 ns/iter (± 92) |
1.00 |
csaf_2_1_tests/6.3.22 |
96375 ns/iter (± 1144) |
98566 ns/iter (± 403) |
0.98 |
full_validation/csaf_2_0_full_preset |
7196265 ns/iter (± 51253) |
7764451 ns/iter (± 45963) |
0.93 |
full_validation/csaf_2_1_full_preset |
50974676 ns/iter (± 116414) |
55033651 ns/iter (± 385546) |
0.93 |
parse_only/csaf_2_0 |
1183849 ns/iter (± 2691) |
1165444 ns/iter (± 1609) |
1.02 |
parse_only/csaf_2_1 |
5969713 ns/iter (± 38722) |
5739481 ns/iter (± 6958) |
1.04 |
typed_parse/csaf_2_0 |
2016881 ns/iter (± 9065) |
2015627 ns/iter (± 18956) |
1.00 |
typed_parse/csaf_2_1 |
9670635 ns/iter (± 25548) |
9558173 ns/iter (± 10807) |
1.01 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 10 out of 11 changed files in this pull request and generated 1 comment.
Suppressed comments (2)
csaf-rs/src/helpers.rs:2
chrono::Durationis imported but never used in this file, which will trigger an unused-import warning (and may fail CI if warnings are denied). Remove the unused import or switch the code to use it.
use chrono::NaiveDate;
csaf-rs/src/validations/test_6_3_07_impl.rs:11
- The error message is grammatically awkward ("does not resolve with HTTP status code of less than 400") and can be made clearer for end users without changing behavior.
Some(code) => format!(
"The URL '{}' does not resolve with HTTP status code of less than 400. Got status code: {}",
defang_url(url),
code
),
| #[cfg(feature = "external-connections")] | ||
| pub mod test_6_3_07_impl; | ||
| #[cfg(feature = "external-connections")] | ||
| pub use test_6_3_07_impl as test_6_3_07; | ||
| #[cfg(not(feature = "external-connections"))] | ||
| pub mod test_6_3_07_stub; | ||
| #[cfg(not(feature = "external-connections"))] | ||
| pub use test_6_3_07_stub as test_6_3_07; |
There was a problem hiding this comment.
Couldn't we do the conditional compilation inside a test_6_3_07.rs so we have one surface area?
There was a problem hiding this comment.
I tried that, and I did not like having to essentially feature/not feature declarations being mixed across the file. Additionally, we might get another block here for wasm. Would it be better in your opinion if we move this into a seperate module that exposes one of the variants as test_6_3_07?
There was a problem hiding this comment.
In my mind this would only be two internal methods with conditions.
pub fn test_6_3_7_use_of_self_referencing_urls_failing_to_resolve {
check_self_referencing_urls()
}
#[cfg(feature = "external-connections")]
fn check_self_referencing_urls() {
// do the actual work
}
#[cfg(not(feature = "external-connections"))]
fn check_self_referencing_urls() {
Ok(())
}I guess the part you didn't like, was to have conditions on the imports as well?
Having this in a module would just move the same pattern one level down, so it would keep the validations.rs file a little bit cleaner.
There was a problem hiding this comment.
I'll give your suggestion another go then 👍
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 13 out of 14 changed files in this pull request and generated 1 comment.
Suppressed comments (4)
csaf-rs/src/validations/test_6_3_07.rs:33
- The network/error branch message could be more specific about what happened (e.g., network error/timeout/DNS), and avoid repeating "does not resolve" which can be interpreted as an HTTP-level failure.
UrlResolutionFailure::FailedWithError(_) => format!(
"The URL '{}' does not resolve. It may be invalid or the server may be unreachable.",
defang_url(url)
),
csaf-rs/src/validations/utils/external_connections/get_status_code.rs:13
- The comment references
mock.rs, but the mock implementation lives inurl_mock.rs. Keeping the file name accurate makes it easier to find the mechanism being described.
// In test builds, callers must explicitly register a mocked outcome for every URL they
// hit (see mock.rs) — either a pre-defined response (StatusCode/ConnectionFailure),
// or Passthrough to let the real HTTP call proceed.
// This panics on unmocked URLs so tests can't accidentally spam / don't depend
// on real network / DNS access.
csaf-rs/src/validations/utils/external_connections/get_status_code.rs:21
- The panic message for an unmocked URL doesn’t include the URL, which makes debugging failing tests harder. Including the URL provides immediate context about what needs to be mocked.
None => panic!("mocked response requested for an undefined url"),
csaf-rs/src/validations/test_6_3_07.rs:29
- The status-code failure message is grammatically awkward ("status code of less than 400") and reads as if the URL never resolved. Rewording to reflect that the URL resolved but was rejected by the <400 requirement will make diagnostics clearer.
This issue also appears on line 30 of the same file.
UrlResolutionFailure::FailedWithStatusCode(code) => format!(
"The URL '{}' does not resolve with HTTP status code of less than 400. Got status code: {}",
defang_url(url),
code
),
| match ureq::head(url) | ||
| .config() | ||
| .http_status_as_error(false) | ||
| .max_redirects(0) | ||
| .timeout_global(Some(std::time::Duration::from_secs(5))) | ||
| .build() |
|
@tziemek @aschierl-xitaso The current impl does pose some SSRF risk, as any distinct url embedded in the doc gets a HEAD request, including local / internal / ... resources. I choose ureq because of the smaller footprint compared to reqwest, but it does not appear to provide any functions / have other crates available that enable anti SSRF policies. I see 3 options to go forward:
On the other hand, this functionality allows some degree of spam on external infra. Again, its only HEAD, and I ensured the requests are distinct per document, but that can be circumvented in various way to still send bigger amounts of requests (max. 1 request per url in the doc) for little cost. Here, I'm considering a configureable upper limit for requests per document, that might be really high on cli and rather low on publicly available instances. I look forward to your thoughts! |
|
TODO: The requests also need to be multi-threaded |
|
TODO: Rename to Non-Self in test comment |
|
TODO: Upstream contact details refactor is adding a new url source (see #916) |
This PR:
The build flag is not listed as default, so currently, only our test infra and library users could use it. I propose we do another round of PRs to test and integrate it in the validator, go bindings and wasm bindings.
Wasm bindings might get tricky 👀