From 018bd3ee240e2fea9fab30e800a645131670aab2 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 23 Nov 2015 14:06:26 +0100 Subject: [PATCH] Make sure that object id can be a string --- lib/private/notification/inotification.php | 8 +++-- lib/private/notification/notification.php | 16 +++++---- tests/lib/notification/notificationtest.php | 36 +++++++++++++-------- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/lib/private/notification/inotification.php b/lib/private/notification/inotification.php index b79b7f6d9d..0187abab15 100644 --- a/lib/private/notification/inotification.php +++ b/lib/private/notification/inotification.php @@ -76,10 +76,11 @@ interface INotification { /** * @param string $type - * @param int $id + * @param string $id * @return $this - * @throws \InvalidArgumentException if the object type or id are invalid + * @throws \InvalidArgumentException if the object type or id is invalid * @since 8.2.0 + * @changed 9.0.0 Type of $id changed to string */ public function setObject($type, $id); @@ -90,8 +91,9 @@ interface INotification { public function getObjectType(); /** - * @return int + * @return string * @since 8.2.0 + * @changed 9.0.0 Return type changed to string */ public function getObjectId(); diff --git a/lib/private/notification/notification.php b/lib/private/notification/notification.php index a22d5446f4..70964fc036 100644 --- a/lib/private/notification/notification.php +++ b/lib/private/notification/notification.php @@ -35,7 +35,7 @@ class Notification implements INotification { /** @var string */ protected $objectType; - /** @var int */ + /** @var string */ protected $objectId; /** @var string */ @@ -83,7 +83,7 @@ class Notification implements INotification { $this->dateTime = new \DateTime(); $this->dateTime->setTimestamp(0); $this->objectType = ''; - $this->objectId = 0; + $this->objectId = ''; $this->subject = ''; $this->subjectParameters = []; $this->subjectParsed = ''; @@ -164,10 +164,11 @@ class Notification implements INotification { /** * @param string $type - * @param int $id + * @param string $id * @return $this * @throws \InvalidArgumentException if the object type or id is invalid * @since 8.2.0 + * @changed 9.0.0 Type of $id changed to string */ public function setObject($type, $id) { if (!is_string($type) || $type === '' || isset($type[64])) { @@ -175,10 +176,10 @@ class Notification implements INotification { } $this->objectType = $type; - if (!is_int($id)) { + if (!is_int($id) && (!is_string($id) || $id === '' || isset($id[64]))) { throw new \InvalidArgumentException('The given object id is invalid'); } - $this->objectId = $id; + $this->objectId = (string) $id; return $this; } @@ -191,8 +192,9 @@ class Notification implements INotification { } /** - * @return int + * @return string * @since 8.2.0 + * @changed 9.0.0 Return type changed to string */ public function getObjectId() { return $this->objectId; @@ -443,7 +445,7 @@ class Notification implements INotification { && $this->getObjectType() !== '' && - $this->getObjectId() !== 0 + $this->getObjectId() !== '' ; } } diff --git a/tests/lib/notification/notificationtest.php b/tests/lib/notification/notificationtest.php index da3ada440e..91fa1de8b4 100644 --- a/tests/lib/notification/notificationtest.php +++ b/tests/lib/notification/notificationtest.php @@ -176,22 +176,23 @@ class NotificationTest extends TestCase { public function dataSetObject() { return [ - ['a', 1], - [str_repeat('a', 64), time()], + ['a', '21', '21'], + [str_repeat('a', 64), 42, '42'], ]; } /** * @dataProvider dataSetObject * @param string $type - * @param int $id + * @param int|string $id + * @param string $exptectedId */ - public function testSetObject($type, $id) { + public function testSetObject($type, $id, $exptectedId) { $this->assertSame('', $this->notification->getObjectType()); - $this->assertSame(0, $this->notification->getObjectId()); + $this->assertSame('', $this->notification->getObjectId()); $this->assertSame($this->notification, $this->notification->setObject($type, $id)); $this->assertSame($type, $this->notification->getObjectType()); - $this->assertSame($id, $this->notification->getObjectId()); + $this->assertSame($exptectedId, $this->notification->getObjectId()); } public function dataSetObjectTypeInvalid() { @@ -210,7 +211,14 @@ class NotificationTest extends TestCase { } public function dataSetObjectIdInvalid() { - return $this->dataInvalidInt(); + return [ + [true], + [false], + [''], + [str_repeat('a', 64 + 1)], + [[]], + [[str_repeat('a', 64 + 1)]], + ]; } /** @@ -560,12 +568,12 @@ class NotificationTest extends TestCase { public function dataIsValidCommon() { return [ - ['', '', 0, '', 0, false], - ['app', '', 0, '', 0, false], - ['app', 'user', 0, '', 0, false], - ['app', 'user', time(), '', 0, false], - ['app', 'user', time(), 'type', 0, false], - ['app', 'user', time(), 'type', 42, true], + ['', '', 0, '', '', false], + ['app', '', 0, '', '', false], + ['app', 'user', 0, '', '', false], + ['app', 'user', time(), '', '', false], + ['app', 'user', time(), 'type', '', false], + ['app', 'user', time(), 'type', '42', true], ]; } @@ -576,7 +584,7 @@ class NotificationTest extends TestCase { * @param string $user * @param int $timestamp * @param string $objectType - * @param int $objectId + * @param string $objectId * @param bool $expected */ public function testIsValidCommon($app, $user, $timestamp, $objectType, $objectId, $expected) {