Skip to content

Commit 0828602

Browse files
committed
Merge pull request #12229 from dylanlanigansmith:dylanlanigansmith-fix-mknodFromTar-writing-empty-files
PiperOrigin-RevId: 820847501
2 parents a46c37d + 63b807f commit 0828602

File tree

3 files changed

+12
-3
lines changed

3 files changed

+12
-3
lines changed

pkg/sentry/fsimpl/tmpfs/tar.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,10 @@ func (fs *filesystem) readFromTar(ctx context.Context, tr *tar.Reader) error {
7777
if n != header.Size {
7878
return fmt.Errorf("failed to read all file content, got %d bytes, want %d", n, header.Size)
7979
}
80+
if header.Size > 0 {
81+
fileToContent[header.Name] = &buffer
82+
}
8083
fileToHeader[header.Name] = header
81-
fileToContent[header.Name] = &buffer
8284
case tar.TypeFifo, tar.TypeBlock, tar.TypeChar:
8385
fileToHeader[header.Name] = header
8486
case tar.TypeSymlink:

runsc/container/container_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4035,11 +4035,10 @@ func TestTarRootfsUpperLayer(t *testing.T) {
40354035
if err := cont.Start(conf); err != nil {
40364036
t.Fatalf("error starting container: %v", err)
40374037
}
4038-
40394038
// Exec the command in the container.
40404039
execArgs := &control.ExecArgs{
40414040
Filename: app,
4042-
Argv: []string{app, "fsTreeCreate", "--depth=3", "--file-per-level=2", "--file-size=1470", "--create-symlink"},
4041+
Argv: []string{app, "fsTreeCreate", "--depth=3", "--file-per-level=2", "--file-size=1470", "--create-symlink", "--add-empty-files"},
40434042
}
40444043
if ws, err := cont.executeSync(conf, execArgs); err != nil {
40454044
t.Fatalf("error exec'ing: %v", err)

test/cmd/test_app/main.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ type fsTreeCreator struct {
6767
fileSize uint
6868
targetDir string
6969
createSymlink bool
70+
addEmptyFiles bool
7071
}
7172

7273
// Name implements subcommands.Command.Name.
@@ -91,6 +92,7 @@ func (c *fsTreeCreator) SetFlags(f *flag.FlagSet) {
9192
f.UintVar(&c.fileSize, "file-size", 4096, "size of each file")
9293
f.StringVar(&c.targetDir, "target-dir", "/", "directory under which to create the filesystem tree")
9394
f.BoolVar(&c.createSymlink, "create-symlink", false, "create symlinks other than the first file per level")
95+
f.BoolVar(&c.addEmptyFiles, "add-empty-files", false, "add empty file to each level")
9496
}
9597

9698
// Execute implements subcommands.Command.Execute.
@@ -117,6 +119,12 @@ func (c *fsTreeCreator) Execute(ctx context.Context, f *flag.FlagSet, args ...an
117119
}
118120
}
119121
}
122+
if c.addEmptyFiles {
123+
emptyPath := filepath.Join(curDir, fmt.Sprintf("empty%d", i))
124+
if err := os.WriteFile(emptyPath, nil, 0666); err != nil {
125+
log.Fatalf("error writing empty file %q: %v", emptyPath, err)
126+
}
127+
}
120128
nextDir := filepath.Join(curDir, "dir")
121129
if err := os.Mkdir(nextDir, 0777); err != nil {
122130
log.Fatalf("error creating directory %q: %v", nextDir, err)

0 commit comments

Comments
 (0)