Forbid plugins to exclude themselves
authorjoshuaruesweg <ruesweg@woltlab.com>
Mon, 21 Mar 2022 14:36:48 +0000 (15:36 +0100)
committerjoshuaruesweg <ruesweg@woltlab.com>
Mon, 21 Mar 2022 14:48:22 +0000 (15:48 +0100)
wcfsetup/install/files/lib/system/package/PackageArchive.class.php
wcfsetup/install/files/lib/system/package/validation/PackageValidationException.class.php
wcfsetup/install/lang/de.xml
wcfsetup/install/lang/en.xml

index 73c190b869b78307587a3dc02e27cf4d80886991..930d5634aac86b0236668892391362cd2eed53b8 100644 (file)
@@ -322,6 +322,13 @@ class PackageArchive
                 );
             }
 
+            if ($element->nodeValue === $this->packageInfo['name']) {
+                throw new PackageValidationException(
+                    PackageValidationException::SELF_EXCLUDE,
+                    ['packageName' => $element->nodeValue]
+                );
+            }
+
             // read attributes
             $data = ['name' => $element->nodeValue];
             $attributes = $xpath->query('attribute::*', $element);
index d9354bbc6068a8826866c3ece52f2327cced670c..180ebd6348a83b0f3e48e6e0583126a71a8c46dd 100644 (file)
@@ -145,6 +145,13 @@ class PackageValidationException extends SystemException
      */
     const INVALID_EXCLUDED_PACKAGE_VERSION_NUBMER = 19;
 
+    /**
+     * the package excludes itself
+     * @var int
+     * @since   5.5
+     */
+    const SELF_EXCLUDE = 20;
+
     /**
      * Creates a new PackageArchiveValidationException.
      *
index 4ae952b912a481548d68b16848ff9c4be4b32aac..22b82e126020bdbec899378c4c5689b72dd765ea 100644 (file)
@@ -1955,6 +1955,7 @@ Die Datenbestände werden sorgfältig gepflegt, aber es ist nicht ausgeschlossen
                <item name="wcf.acp.package.validation.errorCode.17"><![CDATA[Die &lt;void/&gt;-Anweisung ist in den Installations-Anweisungen unzulässig.]]></item>
                <item name="wcf.acp.package.validation.errorCode.18"><![CDATA[Die bereits installierte App „{$application->getPackage()->package}“ verwendet die gleiche App-Abkürzung.]]></item>
                <item name="wcf.acp.package.validation.errorCode.19"><![CDATA[Die Versionsnummer „{$version}“ des inkompatiblen Paketes „{$packageName}“ ist ungültig.]]></item>
+               <item name="wcf.acp.package.validation.errorCode.20"><![CDATA[Das Paket „{$packageName}“ definiert sich selber als inkompatibel.]]></item>
                <item name="wcf.acp.package.validation.failed"><![CDATA[Das hochgeladene Paket kann nicht installiert werden, bitte {if LANGUAGE_USE_INFORMAL_VARIANT}beachte{else}beachten Sie{/if} das unten stehende Prüfungsergebnis.]]></item>
                <item name="wcf.acp.package.evaluation.expired"><![CDATA[Die Testphase von <strong>{$packageName}</strong> ist abgelaufen. Bitte aktualisiere{if !LANGUAGE_USE_INFORMAL_VARIANT}n Sie{/if} auf die aktuellste Version um diese Software weiterhin legal betreiben zu können.{if $pluginStoreFileID || $isWoltLab}<br>{if LANGUAGE_USE_INFORMAL_VARIANT}Du kannst{else}Sie können{/if} die aktuelle Version sicher und bequem <strong>{if $pluginStoreFileID}<a href="https://pluginstore.woltlab.com/file/{$pluginStoreFileID}/">im WoltLab Plugin-Store</a>{else}<a href="https://www.woltlab.com/purchase/">auf WoltLab.com</a>{/if}</strong> erwerben.{/if}]]></item>
                <item name="wcf.acp.package.evaluation.pending"><![CDATA[Bei den folgenden installierten Apps handelt es sich um Testversionen, die am <strong>{$evaluationEndDate|plainTime}</strong> ({@$evaluationEndDate|dateDiff:TIME_NOW:true}) ablaufen. Mit Ablauf der Frist deaktiviert sich die App automatisch, es ist dann notwendig diese auf die endgültige Version zu aktualisieren, um den legalen Betrieb fortzusetzen.
index 2274f7f8cc5d9e5dd0fc8594c82cab70a3b1e720..fdf08da4eb9e0e78c9deb13dc246aeecf412985b 100644 (file)
@@ -1941,6 +1941,7 @@ The database is carefully maintained, but there will be always be a margin of er
                <item name="wcf.acp.package.validation.errorCode.17"><![CDATA[The &lt;void/&gt; instruction may not be used in the install-instructions.]]></item>
                <item name="wcf.acp.package.validation.errorCode.18"><![CDATA[The app “{$application->getPackage()->package}”, which is already installed, uses the same app abbreviation.]]></item>
                <item name="wcf.acp.package.validation.errorCode.19"><![CDATA[The version “{$version}” of the incompatible package “{$packageName}” is invalid.]]></item>
+               <item name="wcf.acp.package.validation.errorCode.20"><![CDATA[The package “{$packageName}” excludes itself.]]></item>
                <item name="wcf.acp.package.validation.failed"><![CDATA[The package cannot be installed, please review the validation results below.]]></item>
                <item name="wcf.acp.package.evaluation.expired"><![CDATA[The evaluation period of <strong>{$packageName}</strong> has expired. For a legal use of this software, please update to the latest available version.{if $pluginStoreFileID || $isWoltLab}<br>The latest version can be purchased quickly and securely <strong>{if $pluginStoreFileID}<a href="https://pluginstore.woltlab.com/file/{$pluginStoreFileID}/">in the WoltLab Plugin-Store</a>{else}<a href="https://www.woltlab.com/purchase/">on WoltLab.com</a>{/if}</strong>.{/if}]]></item>
                <item name="wcf.acp.package.evaluation.pending"><![CDATA[The evaluation period of the apps listed below will expire on <strong>{$evaluationEndDate|plainTime}</strong> ({@$evaluationEndDate|dateDiff:TIME_NOW:true}). The apps will automatically disable themselves after this date and become unusable, you'll need to install the latest versions of the apps to active them again.