Matmarex has uploaded a new change for review.
https://gerrit.wikimedia.org/r/75324
Change subject: Bail when JSON length exceeds database limits
......................................................................
Bail when JSON length exceeds database limits
This might not be necessary on non-MySQL databases, but I'm sure that
at least their limits aren't lower than MySQL's, so let's stay on the
safe side.
Bug: 51740
Change-Id: I9c7115a951f126844bc70755bff12e8cd5fc2be1
---
M TemplateData.i18n.php
M TemplateDataBlob.php
M tests/TemplateDataBlobTest.php
3 files changed, 18 insertions(+), 0 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/TemplateData
refs/changes/24/75324/1
diff --git a/TemplateData.i18n.php b/TemplateData.i18n.php
index 34a4605..b016ec9 100644
--- a/TemplateData.i18n.php
+++ b/TemplateData.i18n.php
@@ -23,6 +23,7 @@
'templatedata-invalid-missing' => 'Required property "$1" not found.',
'templatedata-invalid-unknown' => 'Unexpected property "$1".',
'templatedata-invalid-value' => 'Invalid value for property "$1".',
+ 'templatedata-invalid-length' => 'Data too long to save ($1 bytes,
limit is $2)',
);
/** Message documentation (Message documentation)
@@ -61,6 +62,9 @@
* $1 - name of property. e.g. "params.1.foobar"',
'templatedata-invalid-value' => 'Error message when a property that
cannot contain free-form text has an invalid value.
* $1 - name of property. e.g. "params.1.type"',
+ 'templatedata-invalid-length' => 'Error message when generated JSON\'s
length exceed database limits.
+* $1 - length of generated JSON
+* $2 - maximal allowed length',
);
/** Asturian (asturianu)
diff --git a/TemplateDataBlob.php b/TemplateDataBlob.php
index 4a4a53e..6f986e4 100644
--- a/TemplateDataBlob.php
+++ b/TemplateDataBlob.php
@@ -304,6 +304,13 @@
}
}
+ $maxlength = 65535; // Size of MySQL 'blob' field
+ $length = strlen( $this->getJSON() );
+
+ if ( $length > $maxlength ) {
+ return Status::newFatal( 'templatedata-invalid-length',
$length, $maxlength );
+ }
+
return Status::newGood();
}
diff --git a/tests/TemplateDataBlobTest.php b/tests/TemplateDataBlobTest.php
index 35a4c85..cea30aa 100644
--- a/tests/TemplateDataBlobTest.php
+++ b/tests/TemplateDataBlobTest.php
@@ -304,6 +304,13 @@
}',
'status' => true
),
+ array(
+ 'input' => '{
+ "description": "' . str_repeat( 'X',
65535 ) . '",
+ "params": {}
+ }',
+ 'status' => 'Data too long to save (999 bytes,
limit is 65535)'
+ ),
);
$calls = array();
foreach ( $cases as $case ) {
--
To view, visit https://gerrit.wikimedia.org/r/75324
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I9c7115a951f126844bc70755bff12e8cd5fc2be1
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/TemplateData
Gerrit-Branch: master
Gerrit-Owner: Matmarex <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits