Skip to content

Commit

Permalink
Merge pull request #37344 from nextcloud/backport/35734/master
Browse files Browse the repository at this point in the history
[master] [stable25] Quota value as float for 32-bit systems
  • Loading branch information
MichaIng authored Apr 1, 2023
2 parents 701cc1e + 8104d9f commit 06ab4f2
Show file tree
Hide file tree
Showing 10 changed files with 26 additions and 24 deletions.
2 changes: 1 addition & 1 deletion lib/private/Files/Storage/Common.php
Original file line number Diff line number Diff line change
Expand Up @@ -477,7 +477,7 @@ public function test() {
* get the free space in the storage
*
* @param string $path
* @return int|false
* @return int|float|false
*/
public function free_space($path) {
return \OCP\Files\FileInfo::SPACE_UNKNOWN;
Expand Down
2 changes: 1 addition & 1 deletion lib/private/Files/Storage/DAV.php
Original file line number Diff line number Diff line change
Expand Up @@ -486,7 +486,7 @@ public function touch($path, $mtime = null) {
/**
* @param string $path
* @param mixed $data
* @return int|false
* @return int|float|false
*/
public function file_put_contents($path, $data) {
$path = $this->cleanPath($path);
Expand Down
3 changes: 2 additions & 1 deletion lib/private/Files/Storage/Local.php
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ public function filesize($path): false|int|float {
$fullPath = $this->getSourcePath($path);
if (PHP_INT_SIZE === 4) {
$helper = new \OC\LargeFileHelper;
return $helper->getFileSize($fullPath) ?? false;
return $helper->getFileSize($fullPath);
}
return filesize($fullPath);
}
Expand Down Expand Up @@ -617,6 +617,7 @@ public function moveFromStorage(IStorage $sourceStorage, $sourceInternalPath, $t
}

public function writeStream(string $path, $stream, int $size = null): int {
/** @var int|false $result We consider here that returned size will never be a float because we write less than 4GB */
$result = $this->file_put_contents($path, $stream);
if (is_resource($stream)) {
fclose($stream);
Expand Down
4 changes: 2 additions & 2 deletions lib/private/Files/Storage/Wrapper/Encoding.php
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,7 @@ public function file_get_contents($path) {
*
* @param string $path
* @param mixed $data
* @return int|false
* @return int|float|false
*/
public function file_put_contents($path, $data) {
return $this->storage->file_put_contents($this->findPathToUse($path), $data);
Expand Down Expand Up @@ -396,7 +396,7 @@ public function hash($type, $path, $raw = false) {
* see https://www.php.net/manual/en/function.free_space.php
*
* @param string $path
* @return int|bool
* @return int|float|bool
*/
public function free_space($path) {
return $this->storage->free_space($this->findPathToUse($path));
Expand Down
4 changes: 2 additions & 2 deletions lib/private/Files/Storage/Wrapper/Jail.php
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,7 @@ public function file_get_contents($path) {
*
* @param string $path
* @param mixed $data
* @return int|false
* @return int|float|false
*/
public function file_put_contents($path, $data) {
return $this->getWrapperStorage()->file_put_contents($this->getUnjailedPath($path), $data);
Expand Down Expand Up @@ -335,7 +335,7 @@ public function hash($type, $path, $raw = false) {
* see https://www.php.net/manual/en/function.free_space.php
*
* @param string $path
* @return int|bool
* @return int|float|bool
*/
public function free_space($path) {
return $this->getWrapperStorage()->free_space($this->getUnjailedPath($path));
Expand Down
18 changes: 10 additions & 8 deletions lib/private/Files/Storage/Wrapper/Quota.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@
class Quota extends Wrapper {
/** @var callable|null */
protected $quotaCallback;
protected ?int $quota;
/** @var int|float|null int on 64bits, float on 32bits for bigint */
protected int|float|null $quota;
protected string $sizeRoot;
private SystemConfig $config;

Expand All @@ -57,9 +58,9 @@ public function __construct($parameters) {
}

/**
* @return int quota value
* @return int|float quota value
*/
public function getQuota(): int {
public function getQuota(): int|float {
if ($this->quota === null) {
$quotaCallback = $this->quotaCallback;
if ($quotaCallback === null) {
Expand All @@ -77,7 +78,8 @@ private function hasQuota(): bool {

/**
* @param string $path
* @param \OC\Files\Storage\Storage $storage
* @param IStorage $storage
* @return int|float
*/
protected function getSize($path, $storage = null) {
if ($this->config->getValue('quota_include_external_storage', false)) {
Expand All @@ -101,7 +103,7 @@ protected function getSize($path, $storage = null) {
* Get free space as limited by the quota
*
* @param string $path
* @return int|bool
* @return int|float|bool
*/
public function free_space($path) {
if (!$this->hasQuota()) {
Expand All @@ -128,7 +130,7 @@ public function free_space($path) {
*
* @param string $path
* @param mixed $data
* @return int|false
* @return int|float|false
*/
public function file_put_contents($path, $data) {
if (!$this->hasQuota()) {
Expand Down Expand Up @@ -177,7 +179,7 @@ public function fopen($path, $mode) {
// don't apply quota for part files
if (!$this->isPartFile($path)) {
$free = $this->free_space($path);
if ($source && is_int($free) && $free >= 0 && $mode !== 'r' && $mode !== 'rb') {
if ($source && (is_int($free) || is_float($free)) && $free >= 0 && $mode !== 'r' && $mode !== 'rb') {
// only apply quota for files, not metadata, trash or others
if ($this->shouldApplyQuota($path)) {
return \OC\Files\Stream\Quota::wrap($source, $free);
Expand All @@ -192,7 +194,7 @@ public function fopen($path, $mode) {
* Checks whether the given path is a part file
*
* @param string $path Path that may identify a .part file
* @return string File path without .part extension
* @return bool
* @note this is needed for reusing keys
*/
private function isPartFile($path) {
Expand Down
4 changes: 2 additions & 2 deletions lib/private/Files/Storage/Wrapper/Wrapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ public function file_get_contents($path) {
*
* @param string $path
* @param mixed $data
* @return int|false
* @return int|float|false
*/
public function file_put_contents($path, $data) {
return $this->getWrapperStorage()->file_put_contents($path, $data);
Expand Down Expand Up @@ -325,7 +325,7 @@ public function hash($type, $path, $raw = false) {
* see https://www.php.net/manual/en/function.free_space.php
*
* @param string $path
* @return int|bool
* @return int|float|bool
*/
public function free_space($path) {
return $this->getWrapperStorage()->free_space($path);
Expand Down
5 changes: 2 additions & 3 deletions lib/private/LargeFileHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,9 @@ public function formatUnsignedInteger(int|float|string $number): string {
*
* @param string $filename Path to the file.
*
* @return null|int|float Number of bytes as number (float or int) or
* null on failure.
* @return int|float Number of bytes as number (float or int)
*/
public function getFileSize(string $filename): null|int|float {
public function getFileSize(string $filename): int|float {
$fileSize = $this->getFileSizeViaCurl($filename);
if (!is_null($fileSize)) {
return $fileSize;
Expand Down
4 changes: 2 additions & 2 deletions lib/public/Files/Storage.php
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ public function file_get_contents($path);
*
* @param string $path
* @param mixed $data
* @return int|false
* @return int|float|false
* @since 6.0.0
*/
public function file_put_contents($path, $data);
Expand Down Expand Up @@ -296,7 +296,7 @@ public function hash($type, $path, $raw = false);
* see https://www.php.net/manual/en/function.disk-free-space.php
*
* @param string $path
* @return int|bool
* @return int|float|bool
* @since 6.0.0
*/
public function free_space($path);
Expand Down
4 changes: 2 additions & 2 deletions lib/public/Files/Storage/IStorage.php
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ public function file_get_contents($path);
*
* @param string $path
* @param mixed $data
* @return int|false
* @return int|float|false
* @since 9.0.0
*/
public function file_put_contents($path, $data);
Expand Down Expand Up @@ -293,7 +293,7 @@ public function hash($type, $path, $raw = false);
* see https://www.php.net/manual/en/function.free_space.php
*
* @param string $path
* @return int|bool
* @return int|float|bool
* @since 9.0.0
*/
public function free_space($path);
Expand Down

0 comments on commit 06ab4f2

Please sign in to comment.