]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 187753: Specify a maximum length for quips (512 characters)
authorKoosha Khajeh Moogahi <koosha.khajeh@gmail.com>
Sat, 18 Aug 2012 17:06:44 +0000 (19:06 +0200)
committerFrédéric Buclin <LpSolit@gmail.com>
Sat, 18 Aug 2012 17:06:44 +0000 (19:06 +0200)
r/a=LpSolit

Bugzilla/Constants.pm
Bugzilla/DB/Schema.pm
Bugzilla/Install/DB.pm
quips.cgi
template/en/default/global/user-error.html.tmpl
template/en/default/list/quips.html.tmpl

index 63242ba8ab56e15f130194145f869a47896f5014..f1141195cc3c3d57c9ff9ecf34f0ae117fa56868 100644 (file)
@@ -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
index 728176684ff2153be15d0c64504fea29fc3894cc..eabee07c3cc199263bf5445d60f14e23d9adcf34 100644 (file)
@@ -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'},
         ],
index 5d0f616725c78e3f05e9b06a5ce3fdd855d43630..e04766f24aae7fa315d1f69aa2a00c56b6bcb8b4 100644 (file)
@@ -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__
index 565056a6ed0114a79515d0906f19d98dbb63f7b3..266ed516f43020ce2f6e9710ae998e234b5d0448 100755 (executable)
--- a/quips.cgi
+++ b/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 (?, ?, ?)",
index 8f4d7d21cd31be2c91b27e231b800ad797420363..2d79bf851b1ed2981d84aaa7c9f8e776681eb517 100644 (file)
         <a href="page.cgi?id=quicksearch.html#fields">listed here</a>.</p>
     [% 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
index f38d98221fcfd8f3931e0ed19e2309d29f7101b7..31e766a9b5a9251d7f31a9e6dd8e005f87f31a2d 100644 (file)
@@ -61,7 +61,7 @@
     <input type="hidden" name="action" value="add">
     <input type="hidden" name="token"
            value="[% issue_hash_token(['create-quips']) FILTER html %]">
-    <input size="80" name="quip">
+    <input size="80" name="quip" maxlength="512">
     <p>
       <input type="submit" id="add" value="Add This Quip">
     </p>