Split tags at comma in TagEngine::addObjectTags()
authorTim Düsterhus <duesterhus@woltlab.com>
Sun, 24 Feb 2019 15:47:14 +0000 (16:47 +0100)
committerTim Düsterhus <duesterhus@woltlab.com>
Sun, 24 Feb 2019 15:57:19 +0000 (16:57 +0100)
On Android detecting key codes is unreliable, which causes the
tag[] field to contain values with a comma.

This adds the missing server side “validation” that the tags actually
cannot contain commas by splitting them.

wcfsetup/install/files/lib/system/tagging/TagEngine.class.php

index 49c95436e2c3dca4c774c16aaca91986b84abdb4..ade3910f98fe56b65373952f3a7c40c8dbc9eb3b 100644 (file)
@@ -7,6 +7,7 @@ use wcf\system\database\util\PreparedStatementConditionBuilder;
 use wcf\system\exception\InvalidObjectTypeException;
 use wcf\system\SingletonFactory;
 use wcf\system\WCF;
+use wcf\util\ArrayUtil;
 
 /**
  * Manages the tagging of objects.
@@ -28,7 +29,9 @@ class TagEngine extends SingletonFactory {
         */
        public function addObjectTags($objectType, $objectID, array $tags, $languageID, $replace = true) {
                $objectTypeID = $this->getObjectTypeID($objectType);
-               $tags = array_unique($tags);
+               $tags = array_unique(array_reduce(ArrayUtil::trim(array_map(function($tag) {
+                       return explode(',', $tag);
+               }, $tags)), 'array_merge', []));
                
                // remove tags prior to apply the new ones (prevents duplicate entries)
                if ($replace) {