aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbbaetz%acm.org <>2003-03-22 09:17:00 +0000
committerbbaetz%acm.org <>2003-03-22 09:17:00 +0000
commit3f1f4e57809b2e3f42e637a86646e806470faec5 (patch)
tree60a0b2b106888a7fa8f6bc1085fa1a9d1168102d
parent78db8be8ca8f3de2169981a2ead269fd12395089 (diff)
downloadbugs-3f1f4e57809b2e3f42e637a86646e806470faec5.tar
bugs-3f1f4e57809b2e3f42e637a86646e806470faec5.tar.gz
bugs-3f1f4e57809b2e3f42e637a86646e806470faec5.tar.bz2
bugs-3f1f4e57809b2e3f42e637a86646e806470faec5.tar.xz
bugs-3f1f4e57809b2e3f42e637a86646e806470faec5.zip
Bug 195695 - Requesting a non-existant format results in an Internal Error
r=gerv, a=myk
-rw-r--r--globals.pl20
-rw-r--r--template/en/default/global/user-error.html.tmpl5
2 files changed, 24 insertions, 1 deletions
diff --git a/globals.pl b/globals.pl
index 812fdff15..ae656d9ec 100644
--- a/globals.pl
+++ b/globals.pl
@@ -1490,6 +1490,7 @@ sub FormatTimeUnit {
# Constructs a format object from URL parameters. You most commonly call it
# like this:
# my $format = GetFormat("foo/bar", $::FORM{'format'}, $::FORM{'ctype'});
+
sub GetFormat {
my ($template, $format, $ctype) = @_;
@@ -1505,11 +1506,28 @@ sub GetFormat {
$template .= ($format ? "-$format" : "");
$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
{
'template' => $template ,
'extension' => $ctype ,
- 'ctype' => $::contenttypes->{$ctype} || "text/plain" ,
+ 'ctype' => $::contenttypes->{$ctype} ,
};
}
diff --git a/template/en/default/global/user-error.html.tmpl b/template/en/default/global/user-error.html.tmpl
index dfb8af9fa..89f8cb7f3 100644
--- a/template/en/default/global/user-error.html.tmpl
+++ b/template/en/default/global/user-error.html.tmpl
@@ -192,6 +192,11 @@
[% ELSIF error == "flag_type_name_invalid" %]
[% title = "Flag Type Name Invalid" %]
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" %]
[% title = "Flag Type Sort Key Invalid" %]