[interchange] Fix parsing TemplateDir at startup with multiple dirs on one line (RT# 318)

Gert van der Spoel interchange-cvs at icdevgroup.org
Sun Mar 27 12:20:08 UTC 2011


commit 29b7e509a3febc84d809f7b93772f1ceb17ab73a
Author: Gert van der Spoel <gert at 3edge.com>
Date:   Sun Mar 27 14:16:36 2011 +0200

    Fix parsing TemplateDir at startup with multiple dirs on one line (RT# 318)
    
    When TemplateDir was defined like:
    TemplateDir /path/to/dir /path/to/dir2
    
    this was not being parsed correctly. This has now been resolved.
    Thanks to Mat Jones for the report.

 WHATSNEW-5.7       |    4 ++++
 lib/Vend/Config.pm |   24 +++++++++++++++---------
 2 files changed, 19 insertions(+), 9 deletions(-)
---
diff --git a/WHATSNEW-5.7 b/WHATSNEW-5.7
index c6d6730..817811a 100644
--- a/WHATSNEW-5.7
+++ b/WHATSNEW-5.7
@@ -35,6 +35,10 @@ Core
 * Fixed a bug in the [read-cookie] tag which in very specific rare
   circumstances could return the wrong value for a cookie.
 
+* Fixed a bug in parsing of TemplateDir directive with multiple directories
+  on a single line (RT#318).
+  Thanks to Mat Jones for the report.
+
 Tags
 ----
 * Allow sorting of forum entries.
diff --git a/lib/Vend/Config.pm b/lib/Vend/Config.pm
index 4eac5f9..02e9c44 100644
--- a/lib/Vend/Config.pm
+++ b/lib/Vend/Config.pm
@@ -3926,17 +3926,23 @@ sub parse_dir_array {
 	my($var, $value) = @_;
 	return [] unless $value;
 
-	unless (allowed_file($value)) {
-		config_error('Path %s not allowed in %s directive',
-					  $value, $var);
-	}
-	$value = "$C->{VendRoot}/$value"
-		unless file_name_is_absolute($value);
-	$value =~ s./+$..;
-
 	$C->{$var} = [] unless $C->{$var};
 	my $c = $C->{$var} || [];
-	push @$c, $value;
+
+	my @dirs = grep /\S/, Text::ParseWords::shellwords($value);
+
+	foreach my $dir (@dirs) {
+                my $val;
+		unless (allowed_file($dir)) {
+			config_error('Path %s not allowed in %s directive',
+								$dir, $var);
+		}
+		$val = "$C->{VendRoot}/$dir"
+			unless file_name_is_absolute($val);
+		$val =~ s./+$..;
+		push @$c, $val;
+	}
+
 	return $c;
 }
 



More information about the interchange-cvs mailing list