[Finder] Escape location for regex searches
This commit is contained in:
parent
3da421f2c2
commit
b63926b246
@ -216,7 +216,7 @@ abstract class AbstractFindAdapter extends AbstractAdapter
|
|||||||
// Fixes 'not search' regex problems.
|
// Fixes 'not search' regex problems.
|
||||||
if ($expr->isRegex()) {
|
if ($expr->isRegex()) {
|
||||||
$regex = $expr->getRegex();
|
$regex = $expr->getRegex();
|
||||||
$regex->prepend($regex->hasStartFlag() ? $dir.DIRECTORY_SEPARATOR : '.*')->setEndJoker(!$regex->hasEndFlag());
|
$regex->prepend($regex->hasStartFlag() ? preg_quote($dir).DIRECTORY_SEPARATOR : '.*')->setEndJoker(!$regex->hasEndFlag());
|
||||||
} else {
|
} else {
|
||||||
$expr->prepend('*')->append('*');
|
$expr->prepend('*')->append('*');
|
||||||
}
|
}
|
||||||
@ -247,7 +247,7 @@ abstract class AbstractFindAdapter extends AbstractAdapter
|
|||||||
$command->add('-size -'.($size->getTarget() + 1).'c');
|
$command->add('-size -'.($size->getTarget() + 1).'c');
|
||||||
break;
|
break;
|
||||||
case '>=':
|
case '>=':
|
||||||
$command->add('-size +'. ($size->getTarget() - 1).'c');
|
$command->add('-size +'.($size->getTarget() - 1).'c');
|
||||||
break;
|
break;
|
||||||
case '>':
|
case '>':
|
||||||
$command->add('-size +'.$size->getTarget().'c');
|
$command->add('-size +'.$size->getTarget().'c');
|
||||||
|
@ -569,6 +569,20 @@ class FinderTest extends Iterator\RealIteratorTestCase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider getAdaptersTestData
|
||||||
|
*/
|
||||||
|
public function testRegexSpecialCharsLocationWithPathRestrictionContainingStartFlag(Adapter\AdapterInterface $adapter)
|
||||||
|
{
|
||||||
|
$finder = $this->buildFinder($adapter);
|
||||||
|
$finder->in(__DIR__.DIRECTORY_SEPARATOR.'Fixtures'.DIRECTORY_SEPARATOR.'r+e.g?e*x[c]a(r)s')
|
||||||
|
->path('/^dir/');
|
||||||
|
|
||||||
|
$expected = array('r+e.g?e*x[c]a(r)s'.DIRECTORY_SEPARATOR.'dir',
|
||||||
|
'r+e.g?e*x[c]a(r)s'.DIRECTORY_SEPARATOR.'dir'.DIRECTORY_SEPARATOR.'bar.dat',);
|
||||||
|
$this->assertIterator($this->toAbsoluteFixtures($expected), $finder);
|
||||||
|
}
|
||||||
|
|
||||||
public function testAdaptersOrdering()
|
public function testAdaptersOrdering()
|
||||||
{
|
{
|
||||||
$finder = Finder::create()
|
$finder = Finder::create()
|
||||||
@ -673,7 +687,7 @@ class FinderTest extends Iterator\RealIteratorTestCase
|
|||||||
$tests = array(
|
$tests = array(
|
||||||
array('', '', array()),
|
array('', '', array()),
|
||||||
array('/^A\/B\/C/', '/C$/',
|
array('/^A\/B\/C/', '/C$/',
|
||||||
array('A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat')
|
array('A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat'),
|
||||||
),
|
),
|
||||||
array('/^A\/B/', 'foobar',
|
array('/^A\/B/', 'foobar',
|
||||||
array(
|
array(
|
||||||
@ -681,7 +695,7 @@ class FinderTest extends Iterator\RealIteratorTestCase
|
|||||||
'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C',
|
'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C',
|
||||||
'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'ab.dat',
|
'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'ab.dat',
|
||||||
'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat',
|
'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat',
|
||||||
)
|
),
|
||||||
),
|
),
|
||||||
array('A/B/C', 'foobar',
|
array('A/B/C', 'foobar',
|
||||||
array(
|
array(
|
||||||
@ -689,7 +703,7 @@ class FinderTest extends Iterator\RealIteratorTestCase
|
|||||||
'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat',
|
'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat',
|
||||||
'copy'.DIRECTORY_SEPARATOR.'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C',
|
'copy'.DIRECTORY_SEPARATOR.'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C',
|
||||||
'copy'.DIRECTORY_SEPARATOR.'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat.copy',
|
'copy'.DIRECTORY_SEPARATOR.'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat.copy',
|
||||||
)
|
),
|
||||||
),
|
),
|
||||||
array('A/B', 'foobar',
|
array('A/B', 'foobar',
|
||||||
array(
|
array(
|
||||||
@ -703,12 +717,12 @@ class FinderTest extends Iterator\RealIteratorTestCase
|
|||||||
'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat',
|
'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat',
|
||||||
'copy'.DIRECTORY_SEPARATOR.'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'ab.dat.copy',
|
'copy'.DIRECTORY_SEPARATOR.'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'ab.dat.copy',
|
||||||
'copy'.DIRECTORY_SEPARATOR.'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat.copy',
|
'copy'.DIRECTORY_SEPARATOR.'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat.copy',
|
||||||
)
|
),
|
||||||
),
|
),
|
||||||
array('/^with space\//', 'foobar',
|
array('/^with space\//', 'foobar',
|
||||||
array(
|
array(
|
||||||
'with space'.DIRECTORY_SEPARATOR.'foo.txt',
|
'with space'.DIRECTORY_SEPARATOR.'foo.txt',
|
||||||
)
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -808,7 +822,7 @@ class FinderTest extends Iterator\RealIteratorTestCase
|
|||||||
array(
|
array(
|
||||||
new Adapter\BsdFindAdapter(),
|
new Adapter\BsdFindAdapter(),
|
||||||
new Adapter\GnuFindAdapter(),
|
new Adapter\GnuFindAdapter(),
|
||||||
new Adapter\PhpAdapter()
|
new Adapter\PhpAdapter(),
|
||||||
),
|
),
|
||||||
function (Adapter\AdapterInterface $adapter) {
|
function (Adapter\AdapterInterface $adapter) {
|
||||||
return $adapter->isSupported();
|
return $adapter->isSupported();
|
||||||
|
Reference in New Issue
Block a user