Repository navigation
v2.12.2
·
157 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
Fixed
installFromZip()no longer extracts over an existing plugin (#351) —PluginManager::installFromZip()extracted the archive first and only checked for an existingpluginsrow afterwards. A ZIP for an installed slug overwrote that plugin's files and then failed withalreadyInstalled, leaving a mix of old and new files behind a row that still recorded the old version. A ZIP for a plugin that was on disk without a row (a dev clone, or a plugin waiting forinstallFromDisk()) silently replaced it and the install succeeded.extractZip()now throwsPluginInstallationException::alreadyInstalled()before anything is written when the plugins directory already holds an entry of that name (directory, symlink or file) or apluginsrow records the slug, mirroringThemeManager. Both comparisons ignore case, so anAcmeupload cannot land beside or over an installedacme. A plugins directory that cannot be listed fails closed. The post-extraction row check stays as a backstop.