Skip to content

Commit 8b9fc39

Browse files
authored
Merge pull request #2156 from BishopFox/fix/armory-win
Ensure armory temp files cross‑plat
2 parents 11d6af8 + 27c75c1 commit 8b9fc39

1 file changed

Lines changed: 36 additions & 19 deletions

File tree

client/command/armory/install.go

Lines changed: 36 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -635,20 +635,15 @@ func installAliasPackage(entry *pkgCacheEntry, promptToOverwrite bool, clientCon
635635
return errors.New("signature verification failed")
636636
}
637637

638-
tmpFile, err := os.CreateTemp("", "sliver-armory-")
639-
if err != nil {
640-
return err
641-
}
642-
defer os.Remove(tmpFile.Name())
643-
_, err = tmpFile.Write(tarGz)
638+
tmpFileName, err := writeArmoryTempFile(tarGz)
644639
if err != nil {
645640
return err
646641
}
647-
tmpFile.Close()
642+
defer os.Remove(tmpFileName)
648643

649644
con.Printf(console.Clearln + "\r") // Clear the line
650645

651-
installPath := alias.InstallFromFile(tmpFile.Name(), entry.Alias.CommandName, promptToOverwrite, con)
646+
installPath := alias.InstallFromFile(tmpFileName, entry.Alias.CommandName, promptToOverwrite, con)
652647
if installPath == nil {
653648
return errors.New("failed to install alias")
654649
}
@@ -729,23 +724,45 @@ func installExtensionPackage(entry *pkgCacheEntry, promptToOverwrite bool, clien
729724
return errors.New("signature verification failed")
730725
}
731726

732-
tmpFile, err := os.CreateTemp("", "sliver-armory-")
733-
if err != nil {
734-
return err
735-
}
736-
defer os.Remove(tmpFile.Name())
737-
_, err = tmpFile.Write(tarGz)
738-
if err != nil {
739-
return err
740-
}
741-
err = tmpFile.Sync()
727+
tmpFileName, err := writeArmoryTempFile(tarGz)
742728
if err != nil {
743729
return err
744730
}
731+
defer os.Remove(tmpFileName)
745732

746733
con.Printf(console.Clearln + "\r") // Clear download message
747734

748-
extensions.InstallFromDir(tmpFile.Name(), promptToOverwrite, con, true)
735+
extensions.InstallFromDir(tmpFileName, promptToOverwrite, con, true)
749736

750737
return nil
751738
}
739+
740+
func writeArmoryTempFile(data []byte) (string, error) {
741+
if len(data) == 0 {
742+
return "", errors.New("downloaded archive is empty")
743+
}
744+
tmpFile, err := os.CreateTemp("", "sliver-armory-")
745+
if err != nil {
746+
return "", err
747+
}
748+
tmpFileName := tmpFile.Name()
749+
for len(data) > 0 {
750+
n, err := tmpFile.Write(data)
751+
if err != nil {
752+
tmpFile.Close()
753+
os.Remove(tmpFileName)
754+
return "", err
755+
}
756+
data = data[n:]
757+
}
758+
if err := tmpFile.Sync(); err != nil {
759+
tmpFile.Close()
760+
os.Remove(tmpFileName)
761+
return "", err
762+
}
763+
if err := tmpFile.Close(); err != nil {
764+
os.Remove(tmpFileName)
765+
return "", err
766+
}
767+
return tmpFileName, nil
768+
}

0 commit comments

Comments
 (0)