The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/5466

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===

From 4d9aba3eba5559b8deaf9c9cbb35b566215ffed8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <[email protected]>
Date: Mon, 4 Feb 2019 16:55:40 +0100
Subject: [PATCH 1/3] shared: Properly handle uncompressed tarballs
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <[email protected]>
---
 shared/archive_linux.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/shared/archive_linux.go b/shared/archive_linux.go
index c141936387..5c6aec830d 100644
--- a/shared/archive_linux.go
+++ b/shared/archive_linux.go
@@ -47,7 +47,7 @@ func DetectCompressionFile(f io.ReadSeeker) ([]string, 
string, []string, error)
        case bytes.Equal(header[0:3], []byte{0x5d, 0x00, 0x00}):
                return []string{"--lzma", "-xf"}, ".tar.lzma", []string{"lzma", 
"-d"}, nil
        case bytes.Equal(header[257:262], []byte{'u', 's', 't', 'a', 'r'}):
-               return []string{"-xf"}, ".tar", []string{""}, nil
+               return []string{"-xf"}, ".tar", []string{}, nil
        case bytes.Equal(header[0:4], []byte{'h', 's', 'q', 's'}):
                return []string{""}, ".squashfs", nil, nil
        default:

From f18362015da4fe468305a12036a7b624206b9ebe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <[email protected]>
Date: Mon, 4 Feb 2019 17:14:43 +0100
Subject: [PATCH 2/3] lxd/backup: Don't waste memory during unpack
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #5447

Signed-off-by: Stéphane Graber <[email protected]>
---
 lxd/backup.go | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/lxd/backup.go b/lxd/backup.go
index e469a19429..4aace58f63 100644
--- a/lxd/backup.go
+++ b/lxd/backup.go
@@ -2,10 +2,10 @@ package main
 
 import (
        "archive/tar"
-       "bytes"
        "fmt"
        "io"
        "os"
+       "os/exec"
        "path/filepath"
        "strings"
        "time"
@@ -175,14 +175,22 @@ func backupGetInfo(r io.ReadSeeker) (*backupInfo, error) {
        }
 
        if len(unpacker) > 0 {
-               var buf bytes.Buffer
+               cmd := exec.Command(unpacker[0], unpacker[1:]...)
+               cmd.Stdin = r
 
-               err := shared.RunCommandWithFds(r, &buf, unpacker[0], 
unpacker[1:]...)
+               stdout, err := cmd.StdoutPipe()
                if err != nil {
                        return nil, err
                }
+               defer stdout.Close()
 
-               tr = tar.NewReader(&buf)
+               err = cmd.Start()
+               if err != nil {
+                       return nil, err
+               }
+               defer cmd.Wait()
+
+               tr = tar.NewReader(stdout)
        } else {
                tr = tar.NewReader(r)
        }

From 9a2e7f95b40081668ea81b42f15ab2cab8c8a46c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <[email protected]>
Date: Mon, 4 Feb 2019 16:52:31 +0100
Subject: [PATCH 3/3] lxd/backup: Fix fd leak
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <[email protected]>
---
 lxd/containers_post.go | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/lxd/containers_post.go b/lxd/containers_post.go
index 1ec8a6b3c6..b229c696a3 100644
--- a/lxd/containers_post.go
+++ b/lxd/containers_post.go
@@ -579,6 +579,7 @@ func createFromBackup(d *Daemon, project string, data 
io.Reader) Response {
 
        _, err = io.Copy(f, data)
        if err != nil {
+               f.Close()
                return InternalError(err)
        }
 
@@ -586,11 +587,14 @@ func createFromBackup(d *Daemon, project string, data 
io.Reader) Response {
        f.Seek(0, 0)
        bInfo, err := backupGetInfo(f)
        if err != nil {
+               f.Close()
                return BadRequest(err)
        }
        bInfo.Project = project
 
        run := func(op *operation) error {
+               defer f.Close()
+
                // Dump tarball to storage
                f.Seek(0, 0)
                err = containerCreateFromBackup(d.State(), *bInfo, f)
_______________________________________________
lxc-devel mailing list
[email protected]
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to