status_whiteboard => \&_check_status_whiteboard,
};
- my @select_fields = Bugzilla->get_fields({custom => 1, obsolete => 0,
- type => FIELD_TYPE_SINGLE_SELECT});
+ my @custom_fields = Bugzilla->get_fields({custom => 1, obsolete => 0});
- foreach my $field (@select_fields) {
- $validators->{$field->name} = \&_check_select_field;
+ foreach my $field (@custom_fields) {
+ my $validator;
+ if ($field->type == FIELD_TYPE_SINGLE_SELECT) {
+ $validator = \&_check_select_field;
+ }
+ elsif ($field->type == FIELD_TYPE_FREETEXT) {
+ $validator = \&_check_freetext_field;
+ }
+ $validators->{$field->name} = $validator if $validator;
}
return $validators;
};
return $version;
}
+# Custom Field Validators
+
+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_select_field {
my ($invocant, $value, $field) = @_;
$value = trim($value);
SAFE_PROTOCOLS
MAX_LEN_QUERY_NAME
+ MAX_FREETEXT_LENGTH
);
@Bugzilla::Constants::EXPORT_OK = qw(contenttypes);
# The longest that a saved search name can be.
use constant MAX_LEN_QUERY_NAME => 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
=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)
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,
$::query .= "$fname = ?";
my $value = $cgi->param($fname);
check_field($fname, $value) if ($field->type == FIELD_TYPE_SINGLE_SELECT);
+ $value = Bugzilla::Bug->_check_freetext_field($value)
+ if ($field->type == FIELD_TYPE_FREETEXT);
trick_taint($value);
push(@values, $value);
}
[% IF editable %]
[% SWITCH field.type %]
[% CASE constants.FIELD_TYPE_FREETEXT %]
- <input name="[% field.name FILTER html %]" value="[% value FILTER html %]" size="60">
+ <input id="[% field.name FILTER html %]" name="[% field.name FILTER html %]"
+ value="[% value FILTER html %]" size="60"
+ maxlength="[% constants.MAX_FREETEXT_LENGTH FILTER none %]">
[% CASE constants.FIELD_TYPE_SINGLE_SELECT %]
<select id="[% field.name FILTER html %]" name="[% field.name FILTER html %]">
[% IF allow_dont_change %]
The sort key must be an integer between 0 and 32767 inclusive.
It cannot be <em>[% sortkey FILTER html %]</em>.
+ [% 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):
+ <p><em>[% text FILTER html %]</em></p>
+
[% ELSIF error == "group_cannot_delete" %]
[% title = "Cannot Delete Group" %]
The <em>[% name FILTER html %]</em> group cannot be deleted because