mirror of
https://github.com/DBD-SQLite/DBD-SQLite
synced 2025-06-07 22:28:47 -04:00
#99748 catch runtime errors occurring when user input for the MATCH operator is not a proper regex
This commit is contained in:
parent
28fc0e459e
commit
13e2b63d26
2 changed files with 10 additions and 2 deletions
|
@ -214,7 +214,14 @@ sub NEXT {
|
||||||
|
|
||||||
do {
|
do {
|
||||||
$self->{row_ix} += 1
|
$self->{row_ix} += 1
|
||||||
} until $self->EOF || $self->{is_wanted_row}->($self, $self->{row_ix});
|
} until $self->EOF
|
||||||
|
|| eval {$self->{is_wanted_row}->($self, $self->{row_ix})};
|
||||||
|
|
||||||
|
# NOTE: the eval above is required for cases when user data, injected
|
||||||
|
# into Perl comparison operators, generates errors; for example
|
||||||
|
# WHERE col MATCH '(foo' will die because the regex is not well formed
|
||||||
|
# (no matching parenthesis). In such cases no row is selected and the
|
||||||
|
# query just returns an empty list.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,8 @@ use Test::NoWarnings;
|
||||||
# tests that the MATCH operator does not allow code injection
|
# tests that the MATCH operator does not allow code injection
|
||||||
my @interpolation_attempts = (
|
my @interpolation_attempts = (
|
||||||
'@{[die -1]}',
|
'@{[die -1]}',
|
||||||
# '(?{die 999})', # Eval-group not allowed at runtime
|
'(foobar', # will die - incorrect regex
|
||||||
|
'(?{die 999})', # will die - Eval-group not allowed at runtime
|
||||||
'$foobar',
|
'$foobar',
|
||||||
'$self->{row_ix}',
|
'$self->{row_ix}',
|
||||||
'$main::ARGV[ die 999 ]',
|
'$main::ARGV[ die 999 ]',
|
||||||
|
|
Loading…
Add table
Reference in a new issue