-
-
Notifications
You must be signed in to change notification settings - Fork 4.8k
SCSSCacher tried to delete document root? #9318
Description
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
- 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