From 87cc20fa178f4e159f660eca99d6b5926605c92f Mon Sep 17 00:00:00 2001
From: "mkanat%bugzilla.org"
Date: Sat, 18 Aug 2012 17:15:54 +0000
Subject: [PATCH] Bug 187753: Specify a maximum length for quips (512
characters) r/a=LpSolit
git-svn-id: svn://10.0.0.236/trunk@264148 18797224-902f-48f8-a5cc-f745e15eee43
---
mozilla/webtools/bugzilla/.bzrrev | 2 +-
.../webtools/bugzilla/Bugzilla/Constants.pm | 4 +++
.../webtools/bugzilla/Bugzilla/DB/Schema.pm | 2 +-
.../webtools/bugzilla/Bugzilla/Install/DB.pm | 25 +++++++++++++++++--
mozilla/webtools/bugzilla/quips.cgi | 4 +++
.../en/default/global/user-error.html.tmpl | 6 +++++
.../template/en/default/list/quips.html.tmpl | 2 +-
7 files changed, 40 insertions(+), 5 deletions(-)
diff --git a/mozilla/webtools/bugzilla/.bzrrev b/mozilla/webtools/bugzilla/.bzrrev
index 6ae74f0f928..0e17f9c692e 100644
--- a/mozilla/webtools/bugzilla/.bzrrev
+++ b/mozilla/webtools/bugzilla/.bzrrev
@@ -1 +1 @@
-8347
\ No newline at end of file
+8348
\ No newline at end of file
diff --git a/mozilla/webtools/bugzilla/Bugzilla/Constants.pm b/mozilla/webtools/bugzilla/Bugzilla/Constants.pm
index 63242ba8ab5..f1141195cc3 100644
--- a/mozilla/webtools/bugzilla/Bugzilla/Constants.pm
+++ b/mozilla/webtools/bugzilla/Bugzilla/Constants.pm
@@ -161,6 +161,7 @@ use Memoize;
MAX_BUG_URL_LENGTH
MAX_POSSIBLE_DUPLICATES
MAX_ATTACH_FILENAME_LENGTH
+ MAX_QUIP_LENGTH
PASSWORD_DIGEST_ALGORITHM
PASSWORD_SALT_LENGTH
@@ -556,6 +557,9 @@ use constant MAX_POSSIBLE_DUPLICATES => 25;
# necessary schema changes to store longer names.
use constant MAX_ATTACH_FILENAME_LENGTH => 255;
+# Maximum length of a quip.
+use constant MAX_QUIP_LENGTH => 512;
+
# This is the name of the algorithm used to hash passwords before storing
# them in the database. This can be any string that is valid to pass to
# Perl's "Digest" module. Note that if you change this, it won't take
diff --git a/mozilla/webtools/bugzilla/Bugzilla/DB/Schema.pm b/mozilla/webtools/bugzilla/Bugzilla/DB/Schema.pm
index 728176684ff..eabee07c3cc 100644
--- a/mozilla/webtools/bugzilla/Bugzilla/DB/Schema.pm
+++ b/mozilla/webtools/bugzilla/Bugzilla/DB/Schema.pm
@@ -1484,7 +1484,7 @@ use constant ABSTRACT_SCHEMA => {
REFERENCES => {TABLE => 'profiles',
COLUMN => 'userid',
DELETE => 'SET NULL'}},
- quip => {TYPE => 'MEDIUMTEXT', NOTNULL => 1},
+ quip => {TYPE => 'varchar(512)', NOTNULL => 1},
approved => {TYPE => 'BOOLEAN', NOTNULL => 1,
DEFAULT => 'TRUE'},
],
diff --git a/mozilla/webtools/bugzilla/Bugzilla/Install/DB.pm b/mozilla/webtools/bugzilla/Bugzilla/Install/DB.pm
index 5d0f616725c..e04766f24aa 100644
--- a/mozilla/webtools/bugzilla/Bugzilla/Install/DB.pm
+++ b/mozilla/webtools/bugzilla/Bugzilla/Install/DB.pm
@@ -697,6 +697,9 @@ sub update_table_definitions {
# 2012-08-02 dkl@mozilla.com - Bug 756953
_fix_dependencies_dupes();
+ # 2012-08-01 koosha.khajeh@gmail.com - Bug 187753
+ _shorten_long_quips();
+
################################################################
# New --TABLE-- changes should go *** A B O V E *** this point #
################################################################
@@ -3164,8 +3167,6 @@ sub _change_text_types {
{ TYPE => 'TINYTEXT', NOTNULL => 1 });
$dbh->bz_alter_column('groups', 'description',
{ TYPE => 'MEDIUMTEXT', NOTNULL => 1 });
- $dbh->bz_alter_column('quips', 'quip',
- { TYPE => 'MEDIUMTEXT', NOTNULL => 1 });
$dbh->bz_alter_column('namedqueries', 'query',
{ TYPE => 'LONGTEXT', NOTNULL => 1 });
@@ -3753,6 +3754,26 @@ sub _fix_dependencies_dupes {
}
}
+sub _shorten_long_quips {
+ my $dbh = Bugzilla->dbh;
+ my $quips = $dbh->selectall_arrayref("SELECT quipid, quip FROM quips
+ WHERE CHAR_LENGTH(quip) > 512");
+
+ if (@$quips) {
+ print "Shortening quips longer than 512 characters:";
+
+ my $query = $dbh->prepare("UPDATE quips SET quip = ? WHERE quipid = ?");
+
+ foreach my $quip (@$quips) {
+ my ($quipid, $quip_str) = @$quip;
+ $quip_str = substr($quip_str, 0, 509) . "...";
+ print " $quipid";
+ $query->execute($quip_str, $quipid);
+ }
+ }
+ $dbh->bz_alter_column('quips', 'quip', { TYPE => 'varchar(512)', NOTNULL => 1});
+}
+
1;
__END__
diff --git a/mozilla/webtools/bugzilla/quips.cgi b/mozilla/webtools/bugzilla/quips.cgi
index 565056a6ed0..266ed516f43 100755
--- a/mozilla/webtools/bugzilla/quips.cgi
+++ b/mozilla/webtools/bugzilla/quips.cgi
@@ -65,6 +65,10 @@ if ($action eq "add") {
|| $user->in_group('bz_quip_moderators') || 0;
my $comment = $cgi->param("quip");
$comment || ThrowUserError("need_quip");
+
+ ThrowUserError("quip_too_long", { length => length($comment) })
+ if length($comment) > MAX_QUIP_LENGTH;
+
trick_taint($comment); # Used in a placeholder below
$dbh->do("INSERT INTO quips (userid, quip, approved) VALUES (?, ?, ?)",
diff --git a/mozilla/webtools/bugzilla/template/en/default/global/user-error.html.tmpl b/mozilla/webtools/bugzilla/template/en/default/global/user-error.html.tmpl
index 8f4d7d21cd3..2d79bf851b1 100644
--- a/mozilla/webtools/bugzilla/template/en/default/global/user-error.html.tmpl
+++ b/mozilla/webtools/bugzilla/template/en/default/global/user-error.html.tmpl
@@ -1479,6 +1479,12 @@
listed here.
[% END %]
+ [% ELSIF error == "quip_too_long" %]
+ [% title = "Quip Too Long" %]
+ You entered a quip with a length of [% length FILTER none %] characters,
+ but the maximum allowed length is [% constants.MAX_QUIP_LENGTH FILTER none %]
+ characters.
+
[% ELSIF error == "reassign_to_empty" %]
[% title = "Illegal Reassignment" %]
To reassign [% terms.abug %], you must provide an address for
diff --git a/mozilla/webtools/bugzilla/template/en/default/list/quips.html.tmpl b/mozilla/webtools/bugzilla/template/en/default/list/quips.html.tmpl
index f38d98221fc..31e766a9b5a 100644
--- a/mozilla/webtools/bugzilla/template/en/default/list/quips.html.tmpl
+++ b/mozilla/webtools/bugzilla/template/en/default/list/quips.html.tmpl
@@ -61,7 +61,7 @@
-
+