From a9cc7909508e173e268c63d39a1bc20e0c8d59da Mon Sep 17 00:00:00 2001 From: Maxence Lange Date: Mon, 10 Dec 2018 09:17:04 -0100 Subject: [PATCH 1/4] check size of source entry before insert in database --- lib/Db/CacheActorsRequest.php | 7 ++++++- lib/Db/CoreRequestBuilder.php | 3 +++ lib/Db/NotesRequest.php | 7 ++++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/Db/CacheActorsRequest.php b/lib/Db/CacheActorsRequest.php index 7a3f0ff2..8698b29f 100644 --- a/lib/Db/CacheActorsRequest.php +++ b/lib/Db/CacheActorsRequest.php @@ -66,6 +66,11 @@ class CacheActorsRequest extends CacheActorsRequestBuilder { * @return int */ public function save(Person $actor): int { + $source = $actor->getSource(); + if (sizeof($source) >= CoreRequestBuilder::SOURCE_LENGTH) { + $source = 'too_big'; + } + $qb = $this->getCacheActorsInsertSql(); $qb->setValue('id', $qb->createNamedParameter($actor->getId())) ->setValue('account', $qb->createNamedParameter($actor->getAccount())) @@ -84,7 +89,7 @@ class CacheActorsRequest extends CacheActorsRequestBuilder { ->setValue('name', $qb->createNamedParameter($actor->getName())) ->setValue('summary', $qb->createNamedParameter($actor->getSummary())) ->setValue('public_key', $qb->createNamedParameter($actor->getPublicKey())) - ->setValue('source', $qb->createNamedParameter($actor->getSource())) + ->setValue('source', $qb->createNamedParameter($source)) ->setValue('details', $qb->createNamedParameter(json_encode($actor->getDetails()))) ->setValue( 'creation', diff --git a/lib/Db/CoreRequestBuilder.php b/lib/Db/CoreRequestBuilder.php index 7176ed8c..8f594ddd 100644 --- a/lib/Db/CoreRequestBuilder.php +++ b/lib/Db/CoreRequestBuilder.php @@ -64,6 +64,9 @@ class CoreRequestBuilder { const TABLE_CACHE_DOCUMENTS = 'social_cache_documents'; + const SOURCE_LENGTH = 10000; + + /** @var IDBConnection */ protected $dbConnection; diff --git a/lib/Db/NotesRequest.php b/lib/Db/NotesRequest.php index 9e687e25..10b155e7 100644 --- a/lib/Db/NotesRequest.php +++ b/lib/Db/NotesRequest.php @@ -68,6 +68,11 @@ class NotesRequest extends NotesRequestBuilder { $dTime = new DateTime(); $dTime->setTimestamp($note->getPublishedTime()); + $source = $note->getSource(); + if (sizeof($source) >= CoreRequestBuilder::SOURCE_LENGTH) { + $source = 'too_big'; + } + $qb = $this->getNotesInsertSql(); $qb->setValue('id', $qb->createNamedParameter($note->getId())) ->setValue('type', $qb->createNamedParameter($note->getType())) @@ -95,7 +100,7 @@ class NotesRequest extends NotesRequestBuilder { ) ->setValue('attributed_to', $qb->createNamedParameter($note->getAttributedTo())) ->setValue('in_reply_to', $qb->createNamedParameter($note->getInReplyTo())) - ->setValue('source', $qb->createNamedParameter($note->getSource())) + ->setValue('source', $qb->createNamedParameter($source)) ->setValue( 'instances', $qb->createNamedParameter( json_encode($note->getInstancePaths(), JSON_UNESCAPED_SLASHES) From 73cb46c432a79216ec2265f6bfbc68bb3492dce9 Mon Sep 17 00:00:00 2001 From: Maxence Lange Date: Mon, 10 Dec 2018 09:17:33 -0100 Subject: [PATCH 2/4] fixing size of field in database using Migrations --- .../Version0001Date20181208185242.php | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 lib/Migration/Version0001Date20181208185242.php diff --git a/lib/Migration/Version0001Date20181208185242.php b/lib/Migration/Version0001Date20181208185242.php new file mode 100644 index 00000000..e6941583 --- /dev/null +++ b/lib/Migration/Version0001Date20181208185242.php @@ -0,0 +1,80 @@ + + * @copyright 2018, Maxence Lange + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + + +namespace OCA\Social\Migration; + + +use Closure; +use OCA\Social\Db\CoreRequestBuilder; +use OCP\DB\ISchemaWrapper; +use OCP\Migration\IOutput; +use OCP\Migration\SimpleMigrationStep; + + +/** + * Class Version0001Date20181208185242 + * + * @package OCA\Social\Migration + */ +class Version0001Date20181208185242 extends SimpleMigrationStep { + + + /** + * @param IOutput $output + * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + * + * @return ISchemaWrapper + * @throws \Doctrine\DBAL\Schema\SchemaException + */ + public function changeSchema(IOutput $output, Closure $schemaClosure, array $options + ): ISchemaWrapper { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + $table = $schema->getTable(CoreRequestBuilder::TABLE_CACHE_ACTORS); + $table->changeColumn( + 'source', [ + 'notnull' => true, + 'length' => CoreRequestBuilder::SOURCE_LENGTH, + ] + ); + + $table = $schema->getTable(CoreRequestBuilder::TABLE_SERVER_NOTES); + $table->changeColumn( + 'source', [ + 'notnull' => true, + 'length' => CoreRequestBuilder::SOURCE_LENGTH, + ] + ); + + return $schema; + } +} From 728c4c28881c79dc399949ebede935a851964985 Mon Sep 17 00:00:00 2001 From: Maxence Lange Date: Mon, 10 Dec 2018 09:45:57 -0100 Subject: [PATCH 3/4] let's make the 'activity' field a little bigger too --- lib/Migration/Version0001Date20181208185242.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/Migration/Version0001Date20181208185242.php b/lib/Migration/Version0001Date20181208185242.php index e6941583..3194f2ee 100644 --- a/lib/Migration/Version0001Date20181208185242.php +++ b/lib/Migration/Version0001Date20181208185242.php @@ -75,6 +75,14 @@ class Version0001Date20181208185242 extends SimpleMigrationStep { ] ); + $table = $schema->getTable(CoreRequestBuilder::TABLE_REQUEST_QUEUE); + $table->changeColumn( + 'activity', [ + 'notnull' => true, + 'length' => CoreRequestBuilder::SOURCE_LENGTH, + ] + ); + return $schema; } } From 4342775a29371bae388ab6339c9081a5f5b6e3e7 Mon Sep 17 00:00:00 2001 From: Maxence Lange Date: Mon, 10 Dec 2018 19:54:28 -0100 Subject: [PATCH 4/4] sizeof -> strlen --- lib/Db/CacheActorsRequest.php | 2 +- lib/Db/NotesRequest.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Db/CacheActorsRequest.php b/lib/Db/CacheActorsRequest.php index 8698b29f..d5d571af 100644 --- a/lib/Db/CacheActorsRequest.php +++ b/lib/Db/CacheActorsRequest.php @@ -67,7 +67,7 @@ class CacheActorsRequest extends CacheActorsRequestBuilder { */ public function save(Person $actor): int { $source = $actor->getSource(); - if (sizeof($source) >= CoreRequestBuilder::SOURCE_LENGTH) { + if (strlen($source) >= CoreRequestBuilder::SOURCE_LENGTH) { $source = 'too_big'; } diff --git a/lib/Db/NotesRequest.php b/lib/Db/NotesRequest.php index 10b155e7..a5e7313d 100644 --- a/lib/Db/NotesRequest.php +++ b/lib/Db/NotesRequest.php @@ -69,7 +69,7 @@ class NotesRequest extends NotesRequestBuilder { $dTime->setTimestamp($note->getPublishedTime()); $source = $note->getSource(); - if (sizeof($source) >= CoreRequestBuilder::SOURCE_LENGTH) { + if (strlen($source) >= CoreRequestBuilder::SOURCE_LENGTH) { $source = 'too_big'; }