Merge pull request #7705 from hashicorp/7687

fix null file descriptor error
This commit is contained in:
Adrien Delorme 2019-06-03 10:46:44 +02:00 committed by GitHub
commit f1b7cc7ede
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 3 deletions

View File

@ -130,7 +130,11 @@ func (c *Communicator) Upload(path string, input io.Reader, fi *os.FileInfo) err
}
if strings.HasSuffix(path, `\`) {
// path is a directory
path += filepath.Base((*fi).Name())
if fi != nil {
path += filepath.Base((*fi).Name())
} else {
return fmt.Errorf("Was unable to infer file basename for upload.")
}
}
log.Printf("Uploading file to '%s'", path)
return wcp.Write(path, input)

View File

@ -120,5 +120,25 @@ func TestUpload(t *testing.T) {
if downloadedPayload != PAYLOAD {
t.Fatalf("files are not equal: expected [%s] length: %v, got [%s] length %v", PAYLOAD, len(PAYLOAD), downloadedPayload, len(downloadedPayload))
}
}
func TestUpload_nilFileInfo(t *testing.T) {
wrm := newMockWinRMServer(t)
defer wrm.Close()
c, err := New(&Config{
Host: wrm.Host,
Port: wrm.Port,
Username: "user",
Password: "pass",
Timeout: 30 * time.Second,
})
if err != nil {
t.Fatalf("error creating communicator: %s", err)
}
file := "C:\\Temp\\"
err = c.Upload(file, strings.NewReader(PAYLOAD), nil)
if err == nil {
t.Fatalf("Should have errored because of nil fileinfo")
}
}

View File

@ -9,6 +9,7 @@ import (
"fmt"
"log"
"os"
"path/filepath"
"sort"
"strings"
"time"
@ -252,6 +253,14 @@ func (p *Provisioner) Provision(ctx context.Context, ui packer.Ui, comm packer.C
ui.Say(fmt.Sprintf("Provisioning with powershell script: %s", path))
log.Printf("Opening %s for reading", path)
fi, err := os.Stat(path)
if err != nil {
return fmt.Errorf("Error stating powershell script: %s", err)
}
if strings.HasSuffix(p.config.RemotePath, `\`) {
// path is a directory
p.config.RemotePath += filepath.Base((fi).Name())
}
f, err := os.Open(path)
if err != nil {
return fmt.Errorf("Error opening powershell script: %s", err)
@ -272,7 +281,7 @@ func (p *Provisioner) Provision(ctx context.Context, ui packer.Ui, comm packer.C
if _, err := f.Seek(0, 0); err != nil {
return err
}
if err := comm.Upload(p.config.RemotePath, f, nil); err != nil {
if err := comm.Upload(p.config.RemotePath, f, &fi); err != nil {
return fmt.Errorf("Error uploading script: %s", err)
}