mirror of
https://github.com/pragma-/pbot.git
synced 2024-11-26 13:59:47 +01:00
compiler_vm: improve escaping of quotes
This commit is contained in:
parent
8e21de1f60
commit
4176849e37
@ -443,10 +443,10 @@ sub add_option {
|
||||
sub process_standard_options {
|
||||
my $self = shift;
|
||||
|
||||
my @opt_args = $self->split_line($self->{code});
|
||||
my @opt_args = $self->split_line($self->{code}, preserve_escapes => 0);
|
||||
|
||||
use Data::Dumper;
|
||||
print STDERR Dumper \@opt_args;
|
||||
print STDERR "opt_arg: ", Dumper \@opt_args;
|
||||
|
||||
my $getopt_error;
|
||||
local $SIG{__WARN__} = sub {
|
||||
@ -463,7 +463,7 @@ sub process_standard_options {
|
||||
|
||||
print STDERR "getopt: ret: [$ret]: rest: [$rest], info: $info, input: $input, args: $arguments, paste: $paste\n";
|
||||
|
||||
print STDERR Dumper @opt_args;
|
||||
# print STDERR Dumper \@opt_args;
|
||||
|
||||
if ($info) {
|
||||
my $cmdline = $self->{cmdline};
|
||||
@ -1026,7 +1026,8 @@ sub split_line {
|
||||
|
||||
my %default_opts = (
|
||||
strip_quotes => 0,
|
||||
keep_spaces => 0
|
||||
keep_spaces => 0,
|
||||
preserve_escapes => 1,
|
||||
);
|
||||
|
||||
%opts = (%default_opts, %opts);
|
||||
@ -1067,7 +1068,11 @@ sub split_line {
|
||||
$spaces = 0 if $ch ne ' ';
|
||||
|
||||
if ($escaped) {
|
||||
if ($opts{preserve_escapes}) {
|
||||
$token .= "\\$ch";
|
||||
} else {
|
||||
$token .= $ch;
|
||||
}
|
||||
$escaped = 0;
|
||||
next;
|
||||
}
|
||||
@ -1091,7 +1096,7 @@ sub split_line {
|
||||
next;
|
||||
}
|
||||
|
||||
if ($last_ch eq ' ' and not defined $quote and ($ch eq "'" or $ch eq '"')) {
|
||||
if (($last_ch eq ' ' or $last_ch eq ':' or $last_ch eq '(') and not defined $quote and ($ch eq "'" or $ch eq '"')) {
|
||||
if ($ignore_quote) {
|
||||
# treat unbalanced quote as part of this argument
|
||||
$token .= $ch;
|
||||
|
@ -19,7 +19,7 @@ sub preprocess {
|
||||
|
||||
$self->execute(10, undef, 'date', '-s', "\@$self->{date}");
|
||||
|
||||
my @cmd = $self->split_line($self->{cmdline}, strip_quotes => 1);
|
||||
my @cmd = $self->split_line($self->{cmdline}, strip_quotes => 1, preserve_escapes => 0);
|
||||
|
||||
if ($self->{code} =~ m/print_last_statement\(.*\);$/m) {
|
||||
# remove print_last_statement wrapper in order to get warnings/errors from last statement line
|
||||
@ -75,7 +75,7 @@ sub postprocess {
|
||||
}
|
||||
|
||||
print "Executing gdb\n";
|
||||
my @args = $self->split_line($self->{arguments}, strip_quotes => 1);
|
||||
my @args = $self->split_line($self->{arguments}, strip_quotes => 1, preserve_escapes => 0);
|
||||
my ($exitval, $stdout, $stderr) = $self->execute(60, undef, 'compiler_watchdog.pl', @args);
|
||||
|
||||
my $result = $stderr;
|
||||
|
@ -44,8 +44,8 @@ sub preprocess {
|
||||
$self->execute(10, undef, 'date', '-s', "\@$self->{date}");
|
||||
|
||||
print "Executing [$self->{cmdline}] with args [$self->{arguments}]\n";
|
||||
my @cmdline = $self->split_line($self->{cmdline}, strip_quotes => 1);
|
||||
push @cmdline, $self->split_line($self->{arguments}, strip_quotes => 1);
|
||||
my @cmdline = $self->split_line($self->{cmdline}, strip_quotes => 1, preserve_escapes => 0);
|
||||
push @cmdline, $self->split_line($self->{arguments}, strip_quotes => 1, preserve_escapes => 0);
|
||||
|
||||
my ($retval, $stdout, $stderr) = $self->execute(60, $self->{input}, @cmdline);
|
||||
$self->{output} = $stderr;
|
||||
@ -89,7 +89,8 @@ sub split_line {
|
||||
|
||||
my %default_opts = (
|
||||
strip_quotes => 0,
|
||||
keep_spaces => 0
|
||||
keep_spaces => 0,
|
||||
preserve_escapes => 1,
|
||||
);
|
||||
|
||||
%opts = (%default_opts, %opts);
|
||||
@ -130,7 +131,11 @@ sub split_line {
|
||||
$spaces = 0 if $ch ne ' ';
|
||||
|
||||
if ($escaped) {
|
||||
if ($opts{preserve_escapes}) {
|
||||
$token .= "\\$ch";
|
||||
} else {
|
||||
$token .= $ch;
|
||||
}
|
||||
$escaped = 0;
|
||||
next;
|
||||
}
|
||||
@ -154,7 +159,7 @@ sub split_line {
|
||||
next;
|
||||
}
|
||||
|
||||
if ($last_ch eq ' ' and not defined $quote and ($ch eq "'" or $ch eq '"')) {
|
||||
if (($last_ch eq ' ' or $last_ch eq ':' or $last_ch eq '(') and not defined $quote and ($ch eq "'" or $ch eq '"')) {
|
||||
if ($ignore_quote) {
|
||||
# treat unbalanced quote as part of this argument
|
||||
$token .= $ch;
|
||||
|
Loading…
Reference in New Issue
Block a user