@@ -28,12 +28,15 @@ type digestValidator interface {
2828}
2929
3030func parseDigestValidator (digest string ) (digestValidator , error ) {
31- alg := digest [:strings .Index (digest , ":" )]
31+ i := strings .Index (digest , ":" )
32+ if i < 0 {
33+ return nil , ErrDigestAlgNotSupported
34+ }
35+ alg := digest [:i ]
3236 if v , ok := validatorCtors [alg ]; ok {
3337 return v (), nil
34- } else {
35- return nil , ErrDigestAlgNotSupported
3638 }
39+ return nil , ErrDigestAlgNotSupported
3740}
3841
3942type sha256Validator struct {
@@ -62,15 +65,14 @@ type DigestValidationReader struct {
6265// NewDigestValidationReader creates a new reader that help you to validate digest when you read manifest or blob data.
6366func NewDigestValidationReader (digest string , reader io.Reader ) (* DigestValidationReader , error ) {
6467 validator , err := parseDigestValidator (digest )
65- if err == nil {
66- return & DigestValidationReader {
67- digest : digest ,
68- digestValidator : validator ,
69- reader : reader ,
70- }, nil
71- } else {
68+ if err != nil {
7269 return nil , err
7370 }
71+ return & DigestValidationReader {
72+ digest : digest ,
73+ digestValidator : validator ,
74+ reader : reader ,
75+ }, nil
7476}
7577
7678// Read write to digest validator while read and validate digest when reach EOF.
@@ -98,6 +100,7 @@ type BlobDigestCalculator struct {
98100}
99101
100102// NewBlobDigestCalculator creates a new calculator to help to calculate blob digest when uploading blob.
103+ // You should use a new BlobDigestCalculator each time you upload a blob.
101104func NewBlobDigestCalculator () * BlobDigestCalculator {
102105 return & BlobDigestCalculator {
103106 h : sha256 .New (),
0 commit comments