{"record":{"id":"dd5ad3b35e8d7de2","repo":"GoogleContainerTools/skaffold","slug":"expanding-src-w","errorCode":null,"errorMessage":"expanding src: %w","messagePattern":"expanding src: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/skaffold/docker/parse.go","lineNumber":338,"sourceCode":"\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc readCopyCommand(value *parser.Node, envs []string, workdir string) (*copyCommand, error) {\n\t// If the --from flag is provided, we are dealing with a multi-stage dockerfile\n\t// Adding a dependency from a different stage does not imply a source dependency\n\tif hasMultiStageFlag(value.Flags) {\n\t\treturn nil, nil\n\t}\n\n\tvar paths []string\n\tslex := shell.NewLex('\\\\')\n\tfor value := value.Next; value != nil && !strings.HasPrefix(value.Value, \"#\"); value = value.Next {\n\t\tpath, _, err := slex.ProcessWord(value.Value, shell.EnvsFromSlice(envs))\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"expanding src: %w\", err)\n\t\t}\n\n\t\tpaths = append(paths, path)\n\t}\n\tif len(paths) == 0 {\n\t\treturn nil, fmt.Errorf(\"invalid dockerfile instruction: %q\", value.Original)\n\t}\n\n\t// All paths are sources except the last one\n\tvar srcs []string\n\tfor _, src := range paths[0 : len(paths)-1] {\n\t\tif hasOneOfPrefixes(src, []string{\"http://\", \"https://\", \"<<\"}) {\n\t\t\tlog.Entry(context.TODO()).Debugln(\"Skipping watch on remote/heredoc dependency\", src)\n\t\t\tcontinue\n\t\t}\n\n\t\tsrcs = append(srcs, src)\n\t}","sourceCodeStart":320,"sourceCodeEnd":356,"githubUrl":"https://github.com/GoogleContainerTools/skaffold/blob/a1189de023efc32d4b8e11f395acc678aa555011/pkg/skaffold/docker/parse.go#L320-L356","documentation":"Fires in readCopyCommand when shell expansion of a COPY/ADD source path fails (slex.ProcessWord), e.g. malformed variable substitution or unmatched quoting/escapes in the src argument. Dockerfile parsing succeeded; only path expansion for dependency analysis failed.","triggerScenarios":"Thrown at pkg/skaffold/docker/parse.go:338 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Simplify the COPY/ADD source path (avoid complex variable expansion)","Declare the required ARG/ENV variables used in the path","Fix unbalanced quotes or escapes in the COPY instruction"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"a1189de023efc32d4b8e11f395acc678aa555011","analyzedAt":"2026-09-05T12:09:27.064Z","contentChangedAt":"2026-09-05T12:09:27.064Z","schemaVersion":2},"datasetVersion":"2026-09-12T17:17:11.597Z"}