Signed-off-by: Cristian Staretu <cristian.staretu@gmail.com>
| ... | ... |
@@ -1167,6 +1167,81 @@ func TestBuildCopyDisallowRemote(t *testing.T) {
|
| 1167 | 1167 |
logDone("build - copy - disallow copy from remote")
|
| 1168 | 1168 |
} |
| 1169 | 1169 |
|
| 1170 |
+func TestBuildAddBadLinks(t *testing.T) {
|
|
| 1171 |
+ const ( |
|
| 1172 |
+ dockerfile = ` |
|
| 1173 |
+ FROM scratch |
|
| 1174 |
+ ADD links.tar / |
|
| 1175 |
+ ADD foo.txt /symlink/ |
|
| 1176 |
+ ` |
|
| 1177 |
+ targetFile = "foo.txt" |
|
| 1178 |
+ ) |
|
| 1179 |
+ var ( |
|
| 1180 |
+ name = "test-link-absolute" |
|
| 1181 |
+ ) |
|
| 1182 |
+ defer deleteImages(name) |
|
| 1183 |
+ ctx, err := fakeContext(dockerfile, nil) |
|
| 1184 |
+ if err != nil {
|
|
| 1185 |
+ t.Fatal(err) |
|
| 1186 |
+ } |
|
| 1187 |
+ defer ctx.Close() |
|
| 1188 |
+ |
|
| 1189 |
+ tempDir, err := ioutil.TempDir("", "test-link-absolute-temp-")
|
|
| 1190 |
+ if err != nil {
|
|
| 1191 |
+ t.Fatalf("failed to create temporary directory: %s", tempDir)
|
|
| 1192 |
+ } |
|
| 1193 |
+ defer os.RemoveAll(tempDir) |
|
| 1194 |
+ |
|
| 1195 |
+ symlinkTarget := fmt.Sprintf("/../../../../../../../../../../../..%s", tempDir)
|
|
| 1196 |
+ tarPath := filepath.Join(ctx.Dir, "links.tar") |
|
| 1197 |
+ nonExistingFile := filepath.Join(tempDir, targetFile) |
|
| 1198 |
+ fooPath := filepath.Join(ctx.Dir, targetFile) |
|
| 1199 |
+ |
|
| 1200 |
+ tarOut, err := os.Create(tarPath) |
|
| 1201 |
+ if err != nil {
|
|
| 1202 |
+ t.Fatal(err) |
|
| 1203 |
+ } |
|
| 1204 |
+ |
|
| 1205 |
+ tarWriter := tar.NewWriter(tarOut) |
|
| 1206 |
+ |
|
| 1207 |
+ header := &tar.Header{
|
|
| 1208 |
+ Name: "symlink", |
|
| 1209 |
+ Typeflag: tar.TypeSymlink, |
|
| 1210 |
+ Linkname: symlinkTarget, |
|
| 1211 |
+ Mode: 0755, |
|
| 1212 |
+ Uid: 0, |
|
| 1213 |
+ Gid: 0, |
|
| 1214 |
+ } |
|
| 1215 |
+ |
|
| 1216 |
+ err = tarWriter.WriteHeader(header) |
|
| 1217 |
+ if err != nil {
|
|
| 1218 |
+ t.Fatal(err) |
|
| 1219 |
+ } |
|
| 1220 |
+ |
|
| 1221 |
+ tarWriter.Close() |
|
| 1222 |
+ tarOut.Close() |
|
| 1223 |
+ |
|
| 1224 |
+ foo, err := os.Create(fooPath) |
|
| 1225 |
+ if err != nil {
|
|
| 1226 |
+ t.Fatal(err) |
|
| 1227 |
+ } |
|
| 1228 |
+ defer foo.Close() |
|
| 1229 |
+ |
|
| 1230 |
+ if _, err := foo.WriteString("test"); err != nil {
|
|
| 1231 |
+ t.Fatal(err) |
|
| 1232 |
+ } |
|
| 1233 |
+ |
|
| 1234 |
+ if _, err := buildImageFromContext(name, ctx, true); err != nil {
|
|
| 1235 |
+ t.Fatal(err) |
|
| 1236 |
+ } |
|
| 1237 |
+ |
|
| 1238 |
+ if _, err := os.Stat(nonExistingFile); err == nil || err != nil && !os.IsNotExist(err) {
|
|
| 1239 |
+ t.Fatalf("%s shouldn't have been written and it shouldn't exist", nonExistingFile)
|
|
| 1240 |
+ } |
|
| 1241 |
+ |
|
| 1242 |
+ logDone("build - ADD must add files in container")
|
|
| 1243 |
+} |
|
| 1244 |
+ |
|
| 1170 | 1245 |
// Issue #5270 - ensure we throw a better error than "unexpected EOF" |
| 1171 | 1246 |
// when we can't access files in the context. |
| 1172 | 1247 |
func TestBuildWithInaccessibleFilesInContext(t *testing.T) {
|