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