From 3f1f4e57809b2e3f42e637a86646e806470faec5 Mon Sep 17 00:00:00 2001 From: "bbaetz%acm.org" <> Date: Sat, 22 Mar 2003 09:17:00 +0000 Subject: Bug 195695 - Requesting a non-existant format results in an Internal Error r=gerv, a=myk --- globals.pl | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'globals.pl') 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} , }; } -- cgit v1.2.3-24-g4f1b