files_encryption: Fix getFileSize()
For certain file sizes, we rounded to the wrong chunk number and the returned bogus results. This should fix https://github.com/owncloud/mirall/issues/1009 Conflicts: apps/files_encryption/tests/util.php
This commit is contained in:
parent
959b0f9125
commit
af58360434
|
@ -508,11 +508,18 @@ class Util {
|
||||||
) {
|
) {
|
||||||
|
|
||||||
// get the size from filesystem
|
// get the size from filesystem
|
||||||
$fullPath = $this->view->getLocalFile($path);
|
|
||||||
$size = $this->view->filesize($path);
|
$size = $this->view->filesize($path);
|
||||||
|
|
||||||
|
// fast path, else the calculation for $lastChunkNr is bogus
|
||||||
|
if ($size === 0) {
|
||||||
|
\OC_FileProxy::$enabled = $proxyStatus;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// calculate last chunk nr
|
// calculate last chunk nr
|
||||||
$lastChunkNr = floor($size / 8192);
|
// next highest is end of chunks, one subtracted is last one
|
||||||
|
// we have to read the last chunk, we can't just calculate it (because of padding etc)
|
||||||
|
$lastChunkNr = ceil($size/ 8192) - 1;
|
||||||
$lastChunkSize = $size - ($lastChunkNr * 8192);
|
$lastChunkSize = $size - ($lastChunkNr * 8192);
|
||||||
|
|
||||||
// open stream
|
// open stream
|
||||||
|
|
|
@ -241,6 +241,34 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
|
||||||
$this->view->unlink($this->userId . '/files/' . $filename);
|
$this->view->unlink($this->userId . '/files/' . $filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
< * @brief Test that data that is read by the crypto stream wrapper
|
||||||
|
*/
|
||||||
|
function testGetFileSize() {
|
||||||
|
\Test_Encryption_Util::loginHelper(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1);
|
||||||
|
|
||||||
|
$filename = 'tmp-' . time();
|
||||||
|
$externalFilename = '/' . $this->userId . '/files/' . $filename;
|
||||||
|
|
||||||
|
// Test for 0 byte files
|
||||||
|
$problematicFileSizeData = "";
|
||||||
|
$cryptedFile = $this->view->file_put_contents($externalFilename, $problematicFileSizeData);
|
||||||
|
$this->assertTrue(is_int($cryptedFile));
|
||||||
|
$this->assertEquals($this->util->getFileSize($externalFilename), 0);
|
||||||
|
$decrypt = $this->view->file_get_contents($externalFilename);
|
||||||
|
$this->assertEquals($problematicFileSizeData, $decrypt);
|
||||||
|
$this->view->unlink($this->userId . '/files/' . $filename);
|
||||||
|
|
||||||
|
// Test a file with 18377 bytes as in https://github.com/owncloud/mirall/issues/1009
|
||||||
|
$problematicFileSizeData = str_pad("", 18377, "abc");
|
||||||
|
$cryptedFile = $this->view->file_put_contents($externalFilename, $problematicFileSizeData);
|
||||||
|
$this->assertTrue(is_int($cryptedFile));
|
||||||
|
$this->assertEquals($this->util->getFileSize($externalFilename), 18377);
|
||||||
|
$decrypt = $this->view->file_get_contents($externalFilename);
|
||||||
|
$this->assertEquals($problematicFileSizeData, $decrypt);
|
||||||
|
$this->view->unlink($this->userId . '/files/' . $filename);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @medium
|
* @medium
|
||||||
*/
|
*/
|
||||||
|
@ -333,7 +361,7 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
|
||||||
/**
|
/**
|
||||||
* helper function to set migration status to the right value
|
* helper function to set migration status to the right value
|
||||||
* to be able to test the migration path
|
* to be able to test the migration path
|
||||||
*
|
*
|
||||||
* @param $status needed migration status for test
|
* @param $status needed migration status for test
|
||||||
* @param $user for which user the status should be set
|
* @param $user for which user the status should be set
|
||||||
* @return boolean
|
* @return boolean
|
||||||
|
|
Loading…
Reference in New Issue