{"record":{"id":"18bec6c4211987e1","repo":"slimtoolkit/slim","slug":"malformed-image-reference-s-v","errorCode":null,"errorMessage":"malformed image reference - %s (%v)","messagePattern":"malformed image reference - (.+?) \\((.+?)\\)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/app/master/command/registry/handler_image_index.go","lineNumber":118,"sourceCode":"\t\txc.FailOn(fmt.Errorf(\"malformed image index reference - %s (%v)\", cparams.ImageIndexName, err))\n\t}\n\n\tif _, err := remote.Head(imageIndexRef, remoteOpts...); err != nil {\n\t\tif _, ok := err.(*transport.Error); ok {\n\t\t\tlogger.Debug(\"no image index in registry (ok)\")\n\t\t} else {\n\t\t\tlogger.Debugf(\"error checking image index in registry - %v\", err)\n\t\t}\n\t} else {\n\t\tlogger.Debug(\"image index is already in the registry\")\n\t}\n\n\timageIndex := v1.ImageIndex(empty.Index)\n\tindexImageImgRefs := make([]mutate.IndexAddendum, 0, len(cparams.ImageNames))\n\tfor _, imageName := range cparams.ImageNames {\n\t\timgRef, err := name.ParseReference(imageName, nameOpts...)\n\t\tif err != nil {\n\t\t\txc.FailOn(fmt.Errorf(\"malformed image reference - %s (%v)\", imageName, err))\n\t\t}\n\n\t\tmeta, err := remote.Get(imgRef, remoteOpts...)\n\t\tif err != nil {\n\t\t\txc.FailOn(fmt.Errorf(\"image reference metadata get error - %s (%v)\", imageName, err))\n\t\t}\n\n\t\tif meta.MediaType.IsImage() {\n\t\t\timgMeta, err := meta.Image()\n\t\t\txc.FailOn(err)\n\n\t\t\tbasicImageInfo(xc, imgMeta)\n\n\t\t\timgConfig, err := imgMeta.ConfigFile()\n\t\t\tif err != nil {\n\t\t\t\txc.FailOn(err)\n\t\t\t}\n\t\t\timgRefMeta, err := partial.Descriptor(imgMeta)","sourceCodeStart":100,"sourceCodeEnd":136,"githubUrl":"https://github.com/slimtoolkit/slim/blob/81940d17fa112cc678e32209214bcb2355cb3004/pkg/app/master/command/registry/handler_image_index.go#L100-L136","documentation":"One of the constituent image references in cparams.ImageNames failed name.ParseReference validation. Same reference-syntax rules as the index name, applied per member image; the handler reports which imageName was malformed.","triggerScenarios":"Iterating ImageNames where any entry violates reference syntax — uppercase repo, invalid tag/digest combination, empty string, or stray characters introduced by shell expansion.","commonSituations":"Building multi-arch indexes where per-arch tags are generated with templates producing bad names; copy-pasted references with 'docker.io/' mixed with short names inconsistently; whitespace in comma-separated lists.","solutions":["Validate each image reference string (lowercase repo, valid tag charset [A-Za-z0-9_][A-Za-z0-9._-]{0,127})","Trim whitespace and split comma lists carefully","Do not combine tag and digest in one reference","Normalize short names to fully qualified ones (docker.io/library/nginx:latest)"],"exampleFix":"// before\nImageNames: []string{\" registry.example.com/App:v1-amd64 \"}\n// after\nImageNames: []string{\"registry.example.com/app:v1-amd64\"}","handlingStrategy":"validation","validationCode":"import \"github.com/google/go-containerregistry/pkg/name\"\nfor _, n := range ImageNames {\n    if _, err := name.ParseReference(strings.TrimSpace(n)); err != nil {\n        return fmt.Errorf(\"invalid ref %q: %w\", n, err)\n    }\n}","typeGuard":"func isValidRef(s string) bool {\n    _, err := name.ParseReference(strings.TrimSpace(s))\n    return err == nil\n}","tryCatchPattern":null,"preventionTips":["Lowercase all repository names; trim whitespace from list entries","Never combine tag and digest in one reference","Validate all references with name.ParseReference before pushing or indexing"],"tags":["validation","image-reference","parsing"],"backgroundTag":"invalid-image-reference","analyzedSha":"81940d17fa112cc678e32209214bcb2355cb3004","analyzedAt":"2026-08-31T23:06:12.682Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}