Commit 05b6ae3
committed
fix(recipe): deep-copy Validation in Merge to prevent cached store pollution
RecipeMetadataSpec.Merge aliased other.Validation when the destination
was nil, then later wrote phase pointers through that alias. Across
successive calls on the cached MetadataStore, this mutated whichever
overlay's cached ValidationConfig the alias happened to point at — so
`BuildRecipeResult` was order-dependent, and an overlay that genuinely
lacked a phase could appear compliant after a prior query planted that
phase via pollution.
Fix:
- Add cloneValidationConfig + cloneValidationPhase helpers that deep-
copy phases and their backing slices / NodeSelection.
- Clone in Merge whenever a phase pointer is assigned (both the
nil-destination branch and the per-phase overwrite branch).
- Clone in initBaseMergedSpec so the merged spec never aliases
s.Base.Spec.Validation.
Regression test in metadata_test.go: two sequential merges into a fresh
destination must not mutate the first source. Without the fix the test
detects Deployment leaking from the second merge into the first source's
ValidationConfig.
Refs #9701 parent 6ea43cd commit 05b6ae3
4 files changed
Lines changed: 96 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
456 | 456 | | |
457 | 457 | | |
458 | 458 | | |
459 | | - | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
460 | 465 | | |
461 | 466 | | |
462 | | - | |
| 467 | + | |
463 | 468 | | |
464 | 469 | | |
465 | | - | |
| 470 | + | |
466 | 471 | | |
467 | 472 | | |
468 | | - | |
| 473 | + | |
469 | 474 | | |
470 | 475 | | |
471 | | - | |
| 476 | + | |
472 | 477 | | |
473 | 478 | | |
474 | | - | |
| 479 | + | |
475 | 480 | | |
476 | 481 | | |
477 | 482 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
636 | 636 | | |
637 | 637 | | |
638 | 638 | | |
| 639 | + | |
| 640 | + | |
639 | 641 | | |
640 | 642 | | |
641 | 643 | | |
642 | 644 | | |
643 | | - | |
| 645 | + | |
644 | 646 | | |
645 | 647 | | |
646 | 648 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1027 | 1027 | | |
1028 | 1028 | | |
1029 | 1029 | | |
| 1030 | + | |
| 1031 | + | |
| 1032 | + | |
| 1033 | + | |
| 1034 | + | |
| 1035 | + | |
| 1036 | + | |
| 1037 | + | |
| 1038 | + | |
| 1039 | + | |
| 1040 | + | |
| 1041 | + | |
| 1042 | + | |
| 1043 | + | |
| 1044 | + | |
| 1045 | + | |
| 1046 | + | |
| 1047 | + | |
| 1048 | + | |
| 1049 | + | |
| 1050 | + | |
| 1051 | + | |
| 1052 | + | |
| 1053 | + | |
| 1054 | + | |
| 1055 | + | |
| 1056 | + | |
| 1057 | + | |
| 1058 | + | |
| 1059 | + | |
| 1060 | + | |
| 1061 | + | |
| 1062 | + | |
1030 | 1063 | | |
1031 | 1064 | | |
1032 | 1065 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| 17 | + | |
| 18 | + | |
17 | 19 | | |
18 | 20 | | |
19 | 21 | | |
| |||
59 | 61 | | |
60 | 62 | | |
61 | 63 | | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
0 commit comments