diff --git a/internal/reader/sanitizer/srcset.go b/internal/reader/sanitizer/srcset.go index 0db17b43..1ba2c8e8 100644 --- a/internal/reader/sanitizer/srcset.go +++ b/internal/reader/sanitizer/srcset.go @@ -17,12 +17,12 @@ type ImageCandidate struct { type ImageCandidates []*ImageCandidate func (c ImageCandidates) String() string { - var htmlCandidates []string + htmlCandidates := make([]string, 0, len(c)) for _, imageCandidate := range c { var htmlCandidate string if imageCandidate.Descriptor != "" { - htmlCandidate = fmt.Sprintf(`%s %s`, imageCandidate.ImageURL, imageCandidate.Descriptor) + htmlCandidate = imageCandidate.ImageURL + " " + imageCandidate.Descriptor } else { htmlCandidate = imageCandidate.ImageURL } @@ -36,9 +36,7 @@ func (c ImageCandidates) String() string { // ParseSrcSetAttribute returns the list of image candidates from the set. // https://html.spec.whatwg.org/#parse-a-srcset-attribute func ParseSrcSetAttribute(attributeValue string) (imageCandidates ImageCandidates) { - unparsedCandidates := strings.Split(attributeValue, ", ") - - for _, unparsedCandidate := range unparsedCandidates { + for _, unparsedCandidate := range strings.Split(attributeValue, ", ") { if candidate, err := parseImageCandidate(unparsedCandidate); err == nil { imageCandidates = append(imageCandidates, candidate) } @@ -48,22 +46,20 @@ func ParseSrcSetAttribute(attributeValue string) (imageCandidates ImageCandidate } func parseImageCandidate(input string) (*ImageCandidate, error) { - input = strings.TrimSpace(input) parts := strings.Split(strings.TrimSpace(input), " ") nbParts := len(parts) - if nbParts > 2 || nbParts == 0 { - return nil, fmt.Errorf(`srcset: invalid number of descriptors`) - } - - if nbParts == 2 { + switch { + case nbParts == 1: + return &ImageCandidate{ImageURL: parts[0]}, nil + case nbParts == 2: if !isValidWidthOrDensityDescriptor(parts[1]) { return nil, fmt.Errorf(`srcset: invalid descriptor`) } return &ImageCandidate{ImageURL: parts[0], Descriptor: parts[1]}, nil + default: + return nil, fmt.Errorf(`srcset: invalid number of descriptors`) } - - return &ImageCandidate{ImageURL: parts[0]}, nil } func isValidWidthOrDensityDescriptor(value string) bool {