Perl has a standard module which can split shell command lines for
us, so use it. Function shellwords can deal with quoted parameters
too so we no longer need to pass commands to /bin/sh just because
they contain quoted parameters. This lowers the ratio of commands
passed to /bin/sh from 34% to 31%.
---
 test/run |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

--- a/test/run
+++ b/test/run
@@ -48,6 +48,7 @@ use strict;
 use FileHandle;
 use Getopt::Std;
 use POSIX qw(isatty setuid getcwd);
+use Text::ParseWords;
 use vars qw($opt_l $opt_q $opt_v %output);
 
 no warnings qw(taint);
@@ -267,8 +268,8 @@ sub sg($) {
 sub exec_test($$) {
   my ($raw_prog, $in) = @_;
   local (*IN, *IN_DUP, *IN2, *OUT_DUP, *OUT, *OUT2);
-  my $prog = [ map { s/\\(.)/$1/g; $_ } split /(?<!\\)\s+/, $raw_prog ];
-  my $needs_shell = ($raw_prog =~ /[][|<>;"'`\$\*\?]/);
+  my $prog = [ shellwords($raw_prog) ];
+  my $needs_shell = ($raw_prog =~ /[][|<>;`\$\*\?]/);
 
   if ($prog->[0] eq "umask") {
     umask oct $prog->[1];



_______________________________________________
Quilt-dev mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/quilt-dev

Reply via email to