Commit 3f1f4e57 authored by bbaetz%acm.org's avatar bbaetz%acm.org

Bug 195695 - Requesting a non-existant format results in an Internal Error

r=gerv, a=myk
parent 78db8be8
...@@ -1490,6 +1490,7 @@ sub FormatTimeUnit { ...@@ -1490,6 +1490,7 @@ sub FormatTimeUnit {
# Constructs a format object from URL parameters. You most commonly call it # Constructs a format object from URL parameters. You most commonly call it
# like this: # like this:
# my $format = GetFormat("foo/bar", $::FORM{'format'}, $::FORM{'ctype'}); # my $format = GetFormat("foo/bar", $::FORM{'format'}, $::FORM{'ctype'});
sub GetFormat { sub GetFormat {
my ($template, $format, $ctype) = @_; my ($template, $format, $ctype) = @_;
...@@ -1505,11 +1506,28 @@ sub GetFormat { ...@@ -1505,11 +1506,28 @@ sub GetFormat {
$template .= ($format ? "-$format" : ""); $template .= ($format ? "-$format" : "");
$template .= ".$ctype.tmpl"; $template .= ".$ctype.tmpl";
# Now check that the template actually exists. We only want to check
# if the template exists; any other errors (eg parse errors) will
# end up being detected laer.
eval {
Bugzilla->template->context->template($template);
};
# This parsing may seem fragile, but its OK:
# http://lists.template-toolkit.org/pipermail/templates/2003-March/004370.html
# Even if it is wrong, any sort of error is going to cause a failure
# eventually, so the only issue would be an incorrect error message
if ($@ && $@->info =~ /: not found$/) {
ThrowUserError("format_not_found", { 'format' => $format,
'ctype' => $ctype,
});
}
# Else, just return the info
return return
{ {
'template' => $template , 'template' => $template ,
'extension' => $ctype , 'extension' => $ctype ,
'ctype' => $::contenttypes->{$ctype} || "text/plain" , 'ctype' => $::contenttypes->{$ctype} ,
}; };
} }
......
...@@ -192,6 +192,11 @@ ...@@ -192,6 +192,11 @@
[% ELSIF error == "flag_type_name_invalid" %] [% ELSIF error == "flag_type_name_invalid" %]
[% title = "Flag Type Name Invalid" %] [% title = "Flag Type Name Invalid" %]
The name <em>[% name FILTER html %]</em> must be 1-50 characters long. The name <em>[% name FILTER html %]</em> must be 1-50 characters long.
[% ELSIF error == "format_not_found" %]
[% title = "Format Not Found" %]
The requested format <em>[% format FILTER html %]</em> does not exist with
a content type of <em>[% ctype FILTER html %]</em>.
[% ELSIF error == "flag_type_sortkey_invalid" %] [% ELSIF error == "flag_type_sortkey_invalid" %]
[% title = "Flag Type Sort Key Invalid" %] [% title = "Flag Type Sort Key Invalid" %]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment