summaryrefslogtreecommitdiffstats
path: root/apps/files_external
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2016-06-07 16:29:23 +0200
committerVincent Petry <pvince81@owncloud.com>2016-06-07 16:29:23 +0200
commit15fffb2b10d8f6c5040ea1dc7e27931c5db497a2 (patch)
treed4b520c216773441a5d0418c864c26f41d2062e7 /apps/files_external
parent46fe2ddf2e7a4413586095143521684a0377daad (diff)
downloadnextcloud-server-15fffb2b10d8f6c5040ea1dc7e27931c5db497a2.tar.gz
nextcloud-server-15fffb2b10d8f6c5040ea1dc7e27931c5db497a2.zip
Fix GDrive upload file which name might match the one of a folder
Whenever a file is uploaded to GDrive, there is a check for that file with and without extension, due to Google Docs files having no extension. This logic now only kicks in whenever the detected extensionless file is really a Google Doc file, not a folder. This makes it possible again to upload a file "test.txt" in a folder that also has a folder called "test"
Diffstat (limited to 'apps/files_external')
-rw-r--r--apps/files_external/lib/Lib/Storage/Google.php16
-rw-r--r--apps/files_external/tests/Storage/GoogleTest.php9
2 files changed, 24 insertions, 1 deletions
diff --git a/apps/files_external/lib/Lib/Storage/Google.php b/apps/files_external/lib/Lib/Storage/Google.php
index 2a1ff768e2c..49fde7d066f 100644
--- a/apps/files_external/lib/Lib/Storage/Google.php
+++ b/apps/files_external/lib/Lib/Storage/Google.php
@@ -97,6 +97,9 @@ class Google extends \OC\Files\Storage\Common {
private function getDriveFile($path) {
// Remove leading and trailing slashes
$path = trim($path, '/');
+ if ($path === '.') {
+ $path = '';
+ }
if (isset($this->driveFiles[$path])) {
return $this->driveFiles[$path];
} else if ($path === '') {
@@ -138,7 +141,7 @@ class Google extends \OC\Files\Storage\Common {
if ($pos !== false) {
$pathWithoutExt = substr($path, 0, $pos);
$file = $this->getDriveFile($pathWithoutExt);
- if ($file) {
+ if ($file && $this->isGoogleDocFile($file)) {
// Switch cached Google_Service_Drive_DriveFile to the correct index
unset($this->driveFiles[$pathWithoutExt]);
$this->driveFiles[$path] = $file;
@@ -208,6 +211,17 @@ class Google extends \OC\Files\Storage\Common {
}
}
+ /**
+ * Returns whether the given drive file is a Google Doc file
+ *
+ * @param \Google_Service_Drive_DriveFile
+ *
+ * @return true if the file is a Google Doc file, false otherwise
+ */
+ private function isGoogleDocFile($file) {
+ return $this->getGoogleDocExtension($file->getMimeType()) !== '';
+ }
+
public function mkdir($path) {
if (!$this->is_dir($path)) {
$parentFolder = $this->getDriveFile(dirname($path));
diff --git a/apps/files_external/tests/Storage/GoogleTest.php b/apps/files_external/tests/Storage/GoogleTest.php
index 7684fec8429..eb19cc463b1 100644
--- a/apps/files_external/tests/Storage/GoogleTest.php
+++ b/apps/files_external/tests/Storage/GoogleTest.php
@@ -60,4 +60,13 @@ class GoogleTest extends \Test\Files\Storage\Storage {
parent::tearDown();
}
+
+ public function testSameNameAsFolderWithExtension() {
+ $this->assertTrue($this->instance->mkdir('testsamename'));
+ $this->assertEquals(13, $this->instance->file_put_contents('testsamename.txt', 'some contents'));
+ $this->assertEquals('some contents', $this->instance->file_get_contents('testsamename.txt'));
+ $this->assertTrue($this->instance->is_dir('testsamename'));
+ $this->assertTrue($this->instance->unlink('testsamename.txt'));
+ $this->assertTrue($this->instance->rmdir('testsamename'));
+ }
}