Skip to content

SCSSCacher tried to delete document root? #9318

@Cybso

Description

@Cybso

After upgrading Nextcloud from 13.0.0 to 13.0.2 via occ it reported me the following error:

{
"version" : "13.0.2.1",
"level" : 3,
"reqId" : "FVhZt7vIPnbUeQxouvZr",
"user" : "username",
"remoteAddr" : "ipaddr",
"method" : "GET",
"url" : "/apps/files/",
"userAgent" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.189 Safari/537.36 Vivaldi/1.95.1077.60",
"time" : "2018-04-26T15:51:38+00:00",
"message" : "Exception: {"Exception":"OCP\\Files\\NotPermittedException","Message":"","Code":0,"Trace":"#0 \/srv\/www\/clouddev.company.org\/htdocs\/lib\/private\/Files\/SimpleFS\/SimpleFile.php(138): OC\\Files\\Node\\File->delete()\n#1 \/srv\/www\/clouddev.company.org\/htdocs\/lib\/private\/Template\/SCSSCacher.php(269): OC\\Files\\SimpleFS\\SimpleFile->delete()\n#2 \/srv\/www\/clouddev.company.org\/htdocs\/lib\/private\/Template\/SCSSCacher.php(180): OC\\Template\\SCSSCacher->resetCache()\n#3 \/srv\/www\/clouddev.company.org\/htdocs\/lib\/private\/Template\/SCSSCacher.php(123): OC\\Template\\SCSSCacher->variablesChanged()\n#4 \/srv\/www\/clouddev.company.org\/htdocs\/lib\/private\/Template\/CSSResourceLocator.php(109): OC\\Template\\SCSSCacher->process('\/srv\/www\/cloudd...', 'core\/css\/jquery...', 'core')\n#5 \/srv\/www\/clouddev.company.org\/htdocs\/lib\/private\/Template\/CSSResourceLocator.php(61): OC\\Template\\CSSResourceLocator->cacheAndAppendScssIfExist('\/srv\/www\/cloudd...', 'core\/css\/jquery...')\n#6 \/srv\/www\/clouddev.company.org\/htdocs\/lib\/private\/Template\/ResourceLocator.php(78): OC\\Template\\CSSResourceLocator->doFind('css\/jquery-ui-f...')\n#7 \/srv\/www\/clouddev.company.org\/htdocs\/lib\/private\/TemplateLayout.php(270): OC\\Template\\ResourceLocator->find(Array)\n#8 \/srv\/www\/clouddev.company.org\/htdocs\/lib\/private\/TemplateLayout.php(186): OC\\TemplateLayout::findStylesheetFiles(Array)\n#9 \/srv\/www\/clouddev.company.org\/htdocs\/lib\/private\/legacy\/template.php(207): OC\\TemplateLayout->__construct('user', 'files')\n#10 \/srv\/www\/clouddev.company.org\/htdocs\/lib\/public\/AppFramework\/Http\/TemplateResponse.php(157): OC_Template->fetchPage()\n#11 \/srv\/www\/clouddev.company.org\/htdocs\/lib\/private\/AppFramework\/Http\/Dispatcher.php(114): OCP\\AppFramework\\Http\\TemplateResponse->render()\n#12 \/srv\/www\/clouddev.company.org\/htdocs\/lib\/private\/AppFramework\/App.php(115): OC\\AppFramework\\Http\\Dispatcher->dispatch(Object(OCA\\Files\\Controller\\ViewController), 'index')\n#13 \/srv\/www\/clouddev.company.org\/htdocs\/lib\/private\/AppFramework\/Routing\/RouteActionHandler.php(47): OC\\AppFramework\\App::main('ViewController', 'index', Object(OC\\AppFramework\\DependencyInjection\\DIContainer), Array)\n#14 [internal function]: OC\\AppFramework\\Routing\\RouteActionHandler->__invoke(Array)\n#15 \/srv\/www\/clouddev.company.org\/htdocs\/lib\/private\/Route\/Router.php(297): call_user_func(Object(OC\\AppFramework\\Routing\\RouteActionHandler), Array)\n#16 \/srv\/www\/clouddev.company.org\/htdocs\/lib\/base.php(999): OC\\Route\\Router->match('\/apps\/files\/')\n#17 \/srv\/www\/clouddev.company.org\/htdocs\/index.php(37): OC::handleRequest()\n#18 {main}","File":"\/srv\/www\/clouddev.company.org\/htdocs\/lib\/private\/Files\/Node\/File.php","Line":122}",
"app" : "index"
}

I've traced down that the reason was that $folder->getDirectoryListing() in SCSSCacher::resetCache() returned [""] for one entry. I think PHP resolved that to the document root.

I've fixed that by applying the following patch. However, since that seems to also fixed the failed directory listing, I'm not able to reproduce the problem again.

--- a/htdocs/lib/private/Template/SCSSCacher.php	Thu Apr 26 17:42:42 2018 +0200
+++ b/htdocs/lib/private/Template/SCSSCacher.php	Thu Apr 26 17:58:27 2018 +0200
@@ -266,7 +266,9 @@
 		$appDirectory = $this->appData->getDirectoryListing();
 		foreach ($appDirectory as $folder) {
 			foreach ($folder->getDirectoryListing() as $file) {
-				$file->delete();
+				if (!empty($file)) {
+					$file->delete();
+				}
 			}
 		}
 	}

Steps to reproduce

  1. Don't now.... :-/

Expected behaviour

Nextcloud starts after upgrade

Actual behaviour

Nextcloud fails because SCSSCached tried to delete a file called "".

Server configuration

Operating system: Debian 9

Web server: Apache 2.9

Database: MariaDB 10.1

PHP version: 7.0

Nextcloud version: 13.0.2

Updated from an older Nextcloud/ownCloud or fresh install: Upgraded from 13.0.0 to 13.0.2

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions