From 0e2ea68e886628033f9afeba99f90144b4f85510 Mon Sep 17 00:00:00 2001 From: "lpsolit%gmail.com" <> Date: Sat, 12 Jan 2008 23:20:50 +0000 Subject: Bug 411437: Clipping of "Free Text" fields when user enters more then 255 characters - Patch by Frédéric Buclin r/a=mkanat MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bugzilla/Bug.pm | 19 ++++++++++++++++--- Bugzilla/Constants.pm | 4 ++++ Bugzilla/WebService/Bug.pm | 4 ++-- Bugzilla/WebService/Constants.pm | 1 + template/en/default/bug/field.html.tmpl | 5 +++-- template/en/default/global/user-error.html.tmpl | 7 +++++++ 6 files changed, 33 insertions(+), 7 deletions(-) diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm index e9274466d..28752da46 100755 --- a/Bugzilla/Bug.pm +++ b/Bugzilla/Bug.pm @@ -148,9 +148,12 @@ sub VALIDATORS { elsif ($field->type == FIELD_TYPE_DATETIME) { $validator = \&_check_datetime_field; } - else { + elsif ($field->type == FIELD_TYPE_FREETEXT) { $validator = \&_check_freetext_field; } + else { + $validator = \&_check_default_field; + } $validators->{$field->name} = $validator; } @@ -1074,8 +1077,6 @@ sub _check_estimated_time { return $_[0]->_check_time($_[1], 'estimated_time'); } -sub _check_freetext_field { return defined $_[1] ? trim($_[1]) : ''; } - sub _check_groups { my ($invocant, $product, $group_ids) = @_; @@ -1373,6 +1374,18 @@ sub _check_datetime_field { return $date_time } +sub _check_default_field { return defined $_[1] ? trim($_[1]) : ''; } + +sub _check_freetext_field { + my ($invocant, $text) = @_; + + $text = (defined $text) ? trim($text) : ''; + if (length($text) > MAX_FREETEXT_LENGTH) { + ThrowUserError('freetext_too_long', { text => $text }); + } + return $text; +} + sub _check_multi_select_field { my ($invocant, $values, $field) = @_; return [] if !$values; diff --git a/Bugzilla/Constants.pm b/Bugzilla/Constants.pm index 3c02c3902..ee064bb85 100644 --- a/Bugzilla/Constants.pm +++ b/Bugzilla/Constants.pm @@ -149,6 +149,7 @@ use File::Basename; MAX_LEN_QUERY_NAME MAX_MILESTONE_SIZE MAX_COMPONENT_SIZE + MAX_FREETEXT_LENGTH ); @Bugzilla::Constants::EXPORT_OK = qw(contenttypes); @@ -423,6 +424,9 @@ use constant MAX_MILESTONE_SIZE => 20; # The longest component name allowed. use constant MAX_COMPONENT_SIZE => 64; +# Maximum length allowed for free text fields. +use constant MAX_FREETEXT_LENGTH => 255; + sub bz_locations { # We know that Bugzilla/Constants.pm must be in %INC at this point. # So the only question is, what's the name of the directory diff --git a/Bugzilla/WebService/Bug.pm b/Bugzilla/WebService/Bug.pm index 7148b78cb..c4361e679 100755 --- a/Bugzilla/WebService/Bug.pm +++ b/Bugzilla/WebService/Bug.pm @@ -473,8 +473,8 @@ for more details. =item 104 (Invalid Field) -One of the drop-down fields has an invalid value. The error message will -have more detail. +One of the drop-down fields has an invalid value, or a value entered in a +text field is too long. The error message will have more detail. =item 105 (Invalid Component) diff --git a/Bugzilla/WebService/Constants.pm b/Bugzilla/WebService/Constants.pm index a1ecb53ed..d641b6e70 100755 --- a/Bugzilla/WebService/Constants.pm +++ b/Bugzilla/WebService/Constants.pm @@ -65,6 +65,7 @@ use constant WS_ERROR_CODE => { alias_has_comma_or_space => 103, # Misc. bug field errors illegal_field => 104, + freetext_too_long => 104, # Component errors require_component => 105, component_name_too_long => 105, diff --git a/template/en/default/bug/field.html.tmpl b/template/en/default/bug/field.html.tmpl index ea33d3ad0..1ba0b1784 100644 --- a/template/en/default/bug/field.html.tmpl +++ b/template/en/default/bug/field.html.tmpl @@ -41,8 +41,9 @@ [% IF editable %] [% SWITCH field.type %] [% CASE constants.FIELD_TYPE_FREETEXT %] - + [% CASE constants.FIELD_TYPE_DATETIME %] [% sortkey FILTER html %]. + [% ELSIF error == "freetext_too_long" %] + [% title = "Text Too Long" %] + The text you entered is too long ([% text.length FILTER html %] characters, + above the maximum length allowed of [% constants.MAX_FREETEXT_LENGTH FILTER none %] + characters): +

[% text FILTER html %]

+ [% ELSIF error == "group_cannot_delete" %] [% title = "Cannot Delete Group" %] The [% name FILTER html %] group cannot be deleted because -- cgit v1.2.3-24-g4f1b