Skip to content

Commit d51b722

Browse files
authored
Merge pull request cli#13624 from malancas/handle-missing-trusted-root
Gracefully handle failed GitHub verifier initialization caused by missing trusted root
2 parents bd81afd + 2a371b2 commit d51b722

3 files changed

Lines changed: 39 additions & 0 deletions

File tree

pkg/cmd/attestation/verification/sigstore.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,9 @@ func (v *LiveSigstoreVerifier) chooseVerifier(issuer string) (*verify.Verifier,
223223
}
224224
return v.PublicGood, nil
225225
case GitHubIssuerOrg:
226+
if v.GitHub == nil {
227+
return nil, fmt.Errorf("GitHub verifier is not available (initialization may have failed)")
228+
}
226229
return v.GitHub, nil
227230
default:
228231
return nil, fmt.Errorf("leaf certificate issuer is not recognized")

pkg/cmd/attestation/verification/sigstore_integration_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,28 @@ func TestLiveSigstoreVerifier(t *testing.T) {
144144
require.Len(t, results, 2)
145145
require.NoError(t, err)
146146
})
147+
148+
t.Run("returns an error instead of panicking when the GitHub verifier failed to initialize", func(t *testing.T) {
149+
githubArtifactPath := test.NormalizeRelativePath("../test/data/github_provenance_demo-0.0.12-py3-none-any.whl")
150+
githubArtifact, err := artifact.NewDigestedArtifact(nil, githubArtifactPath, "sha256")
151+
require.NoError(t, err)
152+
153+
githubPolicy := buildPolicy(t, *githubArtifact)
154+
attestations := getAttestationsFor(t, "../test/data/github_provenance_demo-0.0.12-py3-none-any-bundle.jsonl")
155+
156+
verifier, err := NewLiveSigstoreVerifier(SigstoreConfig{
157+
ExternalHttpClient: http.DefaultClient,
158+
Logger: io.NewTestHandler(),
159+
TrustDomain: "missing-trust-domain",
160+
TUFMetadataDir: o.Some(t.TempDir()),
161+
})
162+
require.NoError(t, err)
163+
results, verifyErr := verifier.Verify(attestations, githubPolicy)
164+
require.Nil(t, results)
165+
require.Error(t, verifyErr)
166+
require.ErrorContains(t, verifyErr, "failed to choose verifier based on provided bundle issuer")
167+
require.ErrorContains(t, verifyErr, "GitHub verifier is not available")
168+
})
147169
}
148170

149171
func publicGoodPolicy(t *testing.T) verify.PolicyBuilder {

pkg/cmd/attestation/verification/sigstore_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,20 @@ func TestChooseVerifierWithNilPublicGood(t *testing.T) {
2727
require.ErrorContains(t, err, "public good verifier is not available")
2828
}
2929

30+
func TestChooseVerifierWithNilGitHub(t *testing.T) {
31+
verifier := &LiveSigstoreVerifier{
32+
Logger: io.NewTestHandler(),
33+
NoPublicGood: false,
34+
PublicGood: nil,
35+
GitHub: nil, // Simulate failed GitHub verifier initialization
36+
}
37+
38+
_, err := verifier.chooseVerifier(GitHubIssuerOrg)
39+
40+
require.Error(t, err)
41+
require.ErrorContains(t, err, "GitHub verifier is not available")
42+
}
43+
3044
// TestChooseVerifierUnrecognizedIssuer tests that an error is returned
3145
// for unrecognized issuers.
3246
func TestChooseVerifierUnrecognizedIssuer(t *testing.T) {

0 commit comments

Comments
 (0)