moved glob iterator pattern to const, documentation

This commit is contained in:
El RIDO 2022-11-18 05:36:06 +01:00
parent 02a7be4673
commit 07bc3285aa
No known key found for this signature in database
GPG Key ID: 0F5C940A6BD81F92

View File

@ -22,6 +22,22 @@ use PrivateBin\Json;
*/ */
class Filesystem extends AbstractData class Filesystem extends AbstractData
{ {
/**
* glob() pattern of the two folder levels and the paste files under the
* configured path. Needs to return both files with and without .php suffix,
* so they can be hardened by _prependRename(), which is hooked into exists().
*
* > Note that wildcard patterns are not regular expressions, although they
* > are a bit similar.
*
* @link https://man7.org/linux/man-pages/man7/glob.7.html
* @const string
*/
const PASTE_FILE_PATTERN = DIRECTORY_SEPARATOR . '[a-f0-9][a-f0-9]' .
DIRECTORY_SEPARATOR . '[a-f0-9][a-f0-9]' . DIRECTORY_SEPARATOR .
'[a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]' .
'[a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]*';
/** /**
* first line in paste or comment files, to protect their contents from browsing exposed data directories * first line in paste or comment files, to protect their contents from browsing exposed data directories
* *
@ -341,10 +357,9 @@ class Filesystem extends AbstractData
protected function _getExpiredPastes($batchsize) protected function _getExpiredPastes($batchsize)
{ {
$pastes = array(); $pastes = array();
$files = $this->_getPasteIterator();
$count = 0; $count = 0;
$time = time(); $time = time();
foreach ($files as $file) { foreach ($this->_getPasteIterator() as $file) {
if ($file->isDir()) { if ($file->isDir()) {
continue; continue;
} }
@ -372,8 +387,7 @@ class Filesystem extends AbstractData
public function getAllPastes() public function getAllPastes()
{ {
$pastes = array(); $pastes = array();
$files = $this->_getPasteIterator(); foreach ($this->_getPasteIterator() as $file) {
foreach ($files as $file) {
if ($file->isFile()) { if ($file->isFile()) {
$pastes[] = $file->getBasename('.php'); $pastes[] = $file->getBasename('.php');
} }
@ -420,18 +434,15 @@ class Filesystem extends AbstractData
/** /**
* Get an iterator matching paste files. * Get an iterator matching paste files.
* *
* Note that creating the iterator issues the glob() call, so we can't pre-
* generate this object before files that should get matched exist.
*
* @access private * @access private
* @return \GlobIterator * @return \GlobIterator
*/ */
private function _getPasteIterator() private function _getPasteIterator()
{ {
return new \GlobIterator($this->_path . DIRECTORY_SEPARATOR . return new \GlobIterator($this->_path . self::PASTE_FILE_PATTERN);
'[a-f0-9][a-f0-9]' . DIRECTORY_SEPARATOR .
'[a-f0-9][a-f0-9]' . DIRECTORY_SEPARATOR .
'[a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]' .
'[a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]*');
// need to return both files with and without .php suffix, so they can
// be hardened by _prependRename(), which is hooked into exists()
} }
/** /**