Skip to content

Commit 112e689

Browse files
committed
Improved safety check for removal of packages
1 parent 01265d7 commit 112e689

File tree

1 file changed

+31
-5
lines changed

1 file changed

+31
-5
lines changed

arduino/cores/packagemanager/install_uninstall.go

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,15 @@ func (pm *PackageManager) IsManagedPlatformRelease(platformRelease *cores.Platfo
3838
if pm.PackagesDir == nil {
3939
return false
4040
}
41-
managed, err := platformRelease.InstallDir.IsInsideDir(pm.PackagesDir)
41+
installDir := platformRelease.InstallDir.Clone()
42+
if installDir.FollowSymLink() != nil {
43+
return false
44+
}
45+
packagesDir := pm.PackagesDir.Clone()
46+
if packagesDir.FollowSymLink() != nil {
47+
return false
48+
}
49+
managed, err := installDir.IsInsideDir(packagesDir)
4250
if err != nil {
4351
return false
4452
}
@@ -77,17 +85,35 @@ func (pm *PackageManager) InstallTool(toolRelease *cores.ToolRelease) error {
7785
return toolResource.Install(pm.DownloadDir, pm.TempDir, destDir)
7886
}
7987

88+
// IsManagedToolRelease returns true if the ToolRelease is managed by the PackageManager
89+
func (pm *PackageManager) IsManagedToolRelease(toolRelease *cores.ToolRelease) bool {
90+
if pm.PackagesDir == nil {
91+
return false
92+
}
93+
installDir := toolRelease.InstallDir.Clone()
94+
if installDir.FollowSymLink() != nil {
95+
return false
96+
}
97+
packagesDir := pm.PackagesDir.Clone()
98+
if packagesDir.FollowSymLink() != nil {
99+
return false
100+
}
101+
managed, err := installDir.IsInsideDir(packagesDir)
102+
if err != nil {
103+
return false
104+
}
105+
return managed
106+
}
107+
80108
// UninstallTool remove a ToolRelease.
81109
func (pm *PackageManager) UninstallTool(toolRelease *cores.ToolRelease) error {
82110
if toolRelease.InstallDir == nil {
83111
return fmt.Errorf("tool not installed")
84112
}
85113

86114
// Safety measure
87-
if safe, err := toolRelease.InstallDir.IsInsideDir(pm.PackagesDir); err != nil {
88-
return fmt.Errorf("checking if tool is installed in data dir: %s", err)
89-
} else if !safe {
90-
return fmt.Errorf("tool is not installed inside data dir")
115+
if !pm.IsManagedToolRelease(toolRelease) {
116+
return fmt.Errorf("Tool %s is not managed by package manager", toolRelease)
91117
}
92118

93119
if err := toolRelease.InstallDir.RemoveAll(); err != nil {

0 commit comments

Comments
 (0)