github.com/docker/docker@v299999999.0.0-20200612211812-aaf470eca7b5+incompatible/integration/image/import_test.go (about)

     1  package image // import "github.com/docker/docker/integration/image"
     2  
     3  import (
     4  	"archive/tar"
     5  	"bytes"
     6  	"context"
     7  	"io"
     8  	"runtime"
     9  	"strings"
    10  	"testing"
    11  
    12  	"github.com/docker/docker/api/types"
    13  	"github.com/docker/docker/testutil"
    14  	"github.com/docker/docker/testutil/daemon"
    15  	"gotest.tools/v3/assert"
    16  	"gotest.tools/v3/skip"
    17  )
    18  
    19  // Ensure we don't regress on CVE-2017-14992.
    20  func TestImportExtremelyLargeImageWorks(t *testing.T) {
    21  	skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon")
    22  	skip.If(t, runtime.GOARCH == "arm64", "effective test will be time out")
    23  	skip.If(t, testEnv.OSType == "windows", "TODO enable on windows")
    24  	t.Parallel()
    25  
    26  	// Spin up a new daemon, so that we can run this test in parallel (it's a slow test)
    27  	d := daemon.New(t)
    28  	d.Start(t)
    29  	defer d.Stop(t)
    30  
    31  	client := d.NewClientT(t)
    32  
    33  	// Construct an empty tar archive with about 8GB of junk padding at the
    34  	// end. This should not cause any crashes (the padding should be mostly
    35  	// ignored).
    36  	var tarBuffer bytes.Buffer
    37  
    38  	tw := tar.NewWriter(&tarBuffer)
    39  	err := tw.Close()
    40  	assert.NilError(t, err)
    41  	imageRdr := io.MultiReader(&tarBuffer, io.LimitReader(testutil.DevZero, 8*1024*1024*1024))
    42  	reference := strings.ToLower(t.Name()) + ":v42"
    43  
    44  	_, err = client.ImageImport(context.Background(),
    45  		types.ImageImportSource{Source: imageRdr, SourceName: "-"},
    46  		reference,
    47  		types.ImageImportOptions{})
    48  	assert.NilError(t, err)
    49  }