diff options
author | bbaetz%acm.org <> | 2003-03-22 09:17:00 +0000 |
---|---|---|
committer | bbaetz%acm.org <> | 2003-03-22 09:17:00 +0000 |
commit | 3f1f4e57809b2e3f42e637a86646e806470faec5 (patch) | |
tree | 60a0b2b106888a7fa8f6bc1085fa1a9d1168102d | |
parent | 78db8be8ca8f3de2169981a2ead269fd12395089 (diff) | |
download | bugs-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.pl | 20 | ||||
-rw-r--r-- | template/en/default/global/user-error.html.tmpl | 5 |
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" %] |