[ticket/15692] Fix exists condition and add more checks if file exists

PHPBB3-15692
This commit is contained in:
Rubén Calvo 2018-06-21 04:56:25 +02:00
parent 9650763a19
commit d65e60d1a6
2 changed files with 13 additions and 3 deletions

View file

@ -356,7 +356,7 @@ class local implements adapter_interface, stream_interface
*/ */
public function file_size($path) public function file_size($path)
{ {
$size = filesize($this->root_path . $this->get_path($path) . $this->get_filename($path)); $size = @filesize($this->root_path . $this->get_path($path) . $this->get_filename($path));
if ($size === null) if ($size === null)
{ {

View file

@ -155,7 +155,7 @@ class storage
*/ */
public function exists($path, $full_check = false) public function exists($path, $full_check = false)
{ {
return ($this->is_tracked($path) && $full_check && $this->get_adapter()->exists($path)); return ($this->is_tracked($path) && ($full_check ? $this->get_adapter()->exists($path) : true));
} }
/** /**
@ -324,6 +324,11 @@ class storage
*/ */
public function track_file($path, $update = false) public function track_file($path, $update = false)
{ {
if (!$this->get_adapter()->exists($path))
{
throw new exception('STORAGE_FILE_NO_EXIST', $path);
}
$sql_ary = array( $sql_ary = array(
'file_path' => $path, 'file_path' => $path,
'storage' => $this->get_name(), 'storage' => $this->get_name(),
@ -338,7 +343,7 @@ class storage
if (!$row) if (!$row)
{ {
$file = $this->file_info($path); $file = new file_info($this->get_adapter(), $path);
$sql_ary['filesize'] = $file->size; $sql_ary['filesize'] = $file->size;
$sql = 'INSERT INTO ' . $this->storage_table . $this->db->sql_build_array('INSERT', $sql_ary); $sql = 'INSERT INTO ' . $this->storage_table . $this->db->sql_build_array('INSERT', $sql_ary);
@ -420,6 +425,11 @@ class storage
*/ */
public function file_info($path) public function file_info($path)
{ {
if (!$this->exists($path))
{
throw new exception('STORAGE_FILE_NO_EXIST', $path);
}
return new file_info($this->get_adapter(), $path); return new file_info($this->get_adapter(), $path);
} }