Sophie

Sophie

distrib > Mandriva > 2009.0 > x86_64 > media > main-testing-src > by-pkgid > 73bfe473951dc54d5fd6296305e9006e > files > 4

perl-MDK-Common-1.2.14-2mdv2009.0.src.rpm

Index: lib/MDK/Common/System.pm
===================================================================
--- lib/MDK/Common/System.pm	(révision 241898)
+++ lib/MDK/Common/System.pm	(copie de travail)
@@ -368,21 +368,22 @@
     setVarsInShMode($file, 0777 ^ umask(), $l, @fields);
 }
 
+sub quoteForSh {
+    my ($val) = @_;
+    if ($val =~ /["`\$]/) {
+	$val =~ s/(')/$1\\$1$1/g;
+	$val = qq('$val');
+    } elsif ($val =~ /[\(\)'|\s\\;<>&#\[\]~{}*?]/) {
+	$val = qq("$val");
+    }
+    $val;
+}
+
 sub setVarsInShMode {
     my ($file, $mod, $l, @fields) = @_;
     @fields = keys %$l unless @fields;
     my $string = join('',
-	map { 
-	    my $val = $l->{$_};
-	    if ($val =~ /["`\$]/) {
-		$val =~ s/(')/\\$1/g;
-		$val = qq('$val');
-	    } elsif ($val =~ /['|\s\\]/) {
-		$val =~ s/(["\\])/\\$1/g;
-		$val = qq("$val");
-	    }
-	    "$_=$val\n";
-	} grep { $l->{$_} } @fields
+	map { "$_=" . quoteForSh($l->{$_}) . "\n" } grep { $l->{$_} } @fields
     );
     if ($file =~ m!^/home/!) {
         MDK::Common::File::secured_output($file, $string);
@@ -398,7 +399,7 @@
     @fields = keys %$l unless @fields;
 
     MDK::Common::File::output($file, 
-	(map { $l->{$_} ? "$_=$l->{$_}\n" : () } @fields), 
+	(map { $l->{$_} ? "$_=" . quoteForSh($l->{$_}) . "\n" : () } @fields), 
 	@fields ? "export " . join(" ", @fields) . "\n" : (),
     );
 }
@@ -407,7 +408,7 @@
     my ($file, $l, @fields) = @_;
     @fields = keys %$l unless @fields;
 
-    MDK::Common::File::output($file, map { $l->{$_} ? "setenv $_ $l->{$_}\n" : () } @fields);
+    MDK::Common::File::output($file, map { $l->{$_} ? "setenv $_ " . quoteForSh($l->{$_}) . "\n" : () } @fields);
 }
 
 sub template2file {