Fixed relative filepath check
| ... | ... |
@@ -4879,3 +4879,20 @@ func TestBuildEmptyScratch(t *testing.T) {
|
| 4879 | 4879 |
} |
| 4880 | 4880 |
logDone("build - empty scratch Dockerfile")
|
| 4881 | 4881 |
} |
| 4882 |
+ |
|
| 4883 |
+func TestBuildDotDotFile(t *testing.T) {
|
|
| 4884 |
+ defer deleteImages("sc")
|
|
| 4885 |
+ ctx, err := fakeContext("FROM busybox\n",
|
|
| 4886 |
+ map[string]string{
|
|
| 4887 |
+ "..gitme": "", |
|
| 4888 |
+ }) |
|
| 4889 |
+ if err != nil {
|
|
| 4890 |
+ t.Fatal(err) |
|
| 4891 |
+ } |
|
| 4892 |
+ defer ctx.Close() |
|
| 4893 |
+ |
|
| 4894 |
+ if _, err = buildImageFromContext("sc", ctx, false); err != nil {
|
|
| 4895 |
+ t.Fatalf("Build was supposed to work: %s", err)
|
|
| 4896 |
+ } |
|
| 4897 |
+ logDone("build - ..file")
|
|
| 4898 |
+} |
| ... | ... |
@@ -81,7 +81,7 @@ func UnpackLayer(dest string, layer ArchiveReader) (size int64, err error) {
|
| 81 | 81 |
if err != nil {
|
| 82 | 82 |
return 0, err |
| 83 | 83 |
} |
| 84 |
- if strings.HasPrefix(rel, "..") {
|
|
| 84 |
+ if strings.HasPrefix(rel, "../") {
|
|
| 85 | 85 |
return 0, breakoutError(fmt.Errorf("%q is outside of %q", hdr.Name, dest))
|
| 86 | 86 |
} |
| 87 | 87 |
base := filepath.Base(path) |
| ... | ... |
@@ -99,3 +99,29 @@ func TestChrootApplyEmptyArchiveFromSlowReader(t *testing.T) {
|
| 99 | 99 |
t.Fatal(err) |
| 100 | 100 |
} |
| 101 | 101 |
} |
| 102 |
+ |
|
| 103 |
+func TestChrootApplyDotDotFile(t *testing.T) {
|
|
| 104 |
+ tmpdir, err := ioutil.TempDir("", "docker-TestChrootApplyDotDotFile")
|
|
| 105 |
+ if err != nil {
|
|
| 106 |
+ t.Fatal(err) |
|
| 107 |
+ } |
|
| 108 |
+ defer os.RemoveAll(tmpdir) |
|
| 109 |
+ src := filepath.Join(tmpdir, "src") |
|
| 110 |
+ if err := os.MkdirAll(src, 0700); err != nil {
|
|
| 111 |
+ t.Fatal(err) |
|
| 112 |
+ } |
|
| 113 |
+ if err := ioutil.WriteFile(filepath.Join(src, "..gitme"), []byte(""), 0644); err != nil {
|
|
| 114 |
+ t.Fatal(err) |
|
| 115 |
+ } |
|
| 116 |
+ stream, err := archive.Tar(src, archive.Uncompressed) |
|
| 117 |
+ if err != nil {
|
|
| 118 |
+ t.Fatal(err) |
|
| 119 |
+ } |
|
| 120 |
+ dest := filepath.Join(tmpdir, "dest") |
|
| 121 |
+ if err := os.MkdirAll(dest, 0700); err != nil {
|
|
| 122 |
+ t.Fatal(err) |
|
| 123 |
+ } |
|
| 124 |
+ if _, err := ApplyLayer(dest, stream); err != nil {
|
|
| 125 |
+ t.Fatal(err) |
|
| 126 |
+ } |
|
| 127 |
+} |