ulsdevteam / pkp-clamav

Clam AV plugin for PKP OJS / OMP
GNU General Public License v2.0
5 stars 5 forks source link

Plugin throws SlimApplicationError in 3.3 #12

Closed ctgraham closed 2 years ago

ctgraham commented 2 years ago

Fix for https://github.com/pkp/pkp-lib/issues/7828 was back ported to 3.3 (as of 3.3.0-11), so core will try to delete a file we've already deleted here: https://github.com/ulsdevteam/pkp-clamav/blob/9919574752bedcc00f574c93b87185291e47d742/ClamavPlugin.inc.php#L374-L375

The user will see a SlimApplicationError, and the log will show:

[php7:notice] [pid 22826] [client 10.25.64.145:51754] Slim Application Error:
Type: Exception
Message: Unable to locate file 1278.
File: ojs/lib/pkp/classes/services/PKPFileService.inc.php
Line: 113
Trace: #0 ojs/lib/pkp/api/v1/submissions/PKPSubmissionFileHandler.inc.php(292): PKP\\Services\\PKPFileService->delete()
#1 [internal function]: PKPSubmissionFileHandler->add()
#2 ojs/lib/pkp/lib/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php(40): call_user_func()
#3 ojs/lib/pkp/lib/vendor/slim/slim/Slim/Route.php(281): Slim\\Handlers\\Strategies\\RequestResponse->__invoke()
#4 ojs/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(117): Slim\\Route->__invoke()
#5 ojs/lib/pkp/lib/vendor/slim/slim/Slim/Route.php(268): Slim\\Route->callMiddlewareStack()
#6 ojs/lib/pkp/lib/vendor/slim/slim/Slim/App.php(503): Slim\\Route->run()
#7 ojs/lib/pkp/classes/security/authorization/internal/ApiAuthorizationMiddleware.inc.php(77): Slim\\App->__invoke()
#8 [internal function]: ApiAuthorizationMiddleware->__invoke()
#9 ojs/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#10 [internal function]: Slim\\DeferredCallable->__invoke()
#11 ojs/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#12 ojs/lib/pkp/classes/security/authorization/internal/ApiCsrfMiddleware.inc.php(46): Slim\\App->Slim\\{closure}()
#13 [internal function]: ApiCsrfMiddleware->__invoke()
#14 ojs/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#15 [internal function]: Slim\\DeferredCallable->__invoke()
#16 ojs/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#17 ojs/lib/pkp/classes/security/authorization/internal/ApiTokenDecodingMiddleware.inc.php(131): Slim\\App->Slim\\{closure}()
#18 [internal function]: ApiTokenDecodingMiddleware->__invoke()
#19 ojs/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#20 [internal function]: Slim\\DeferredCallable->__invoke()
#21 ojs/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#22 ojs/lib/pkp/classes/handler/APIHandler.inc.php(68): Slim\\App->Slim\\{closure}()
#23 [internal function]: APIHandler->{closure}()
#24 ojs/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#25 [internal function]: Slim\\DeferredCallable->__invoke()
#26 ojs/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#27 ojs/lib/pkp/classes/handler/APIHandler.inc.php(127): Slim\\App->Slim\\{closure}()
#28 [internal function]: APIHandler->{closure}()
#29 ojs/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#30 [internal function]: Slim\\DeferredCallable->__invoke()
#31 ojs/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#32 ojs/lib/pkp/classes/handler/APIHandler.inc.php(132): Slim\\App->Slim\\{closure}()
#33 [internal function]: APIHandler->{closure}()
#34 ojs/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#35 [internal function]: Slim\\DeferredCallable->__invoke()
#36 ojs/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#37 ojs/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(117): Slim\\App->Slim\\{closure}()
#38 ojs/lib/pkp/lib/vendor/slim/slim/Slim/App.php(392): Slim\\App->callMiddlewareStack()
#39 ojs/lib/pkp/classes/handler/APIHandler.inc.php(124): Slim\\App->process()
#40 [internal function]: APIHandler->{closure}()
#41 ojs/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#42 [internal function]: Slim\\DeferredCallable->__invoke()
#43 ojs/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#44 ojs/lib/pkp/classes/handler/APIHandler.inc.php(132): Slim\\App->Slim\\{closure}()
#45 [internal function]: APIHandler->{closure}()
#46 ojs/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#47 [internal function]: Slim\\DeferredCallable->__invoke()
#48 ojs/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#49 ojs/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(117): Slim\\App->Slim\\{closure}()
#50 ojs/lib/pkp/lib/vendor/slim/slim/Slim/App.php(392): Slim\\App->callMiddlewareStack()
#51 ojs/lib/pkp/lib/vendor/slim/slim/Slim/App.php(297): Slim\\App->process()
#52 ojs/lib/pkp/classes/core/APIRouter.inc.php(115): Slim\\App->run()
#53 ojs/lib/pkp/classes/core/Dispatcher.inc.php(144): APIRouter->route()
#54 ojs/lib/pkp/classes/core/PKPApplication.inc.php(362): Dispatcher->dispatch()
#55 ojs/index.php(68): PKPApplication->execute()
#56 {main}
View in rendered output by enabling the "displayErrorDetails" setting.

Also, the logic around failed scan will generate similar errors: Both _clamscanFile(): https://github.com/ulsdevteam/pkp-clamav/blob/9919574752bedcc00f574c93b87185291e47d742/ClamavPlugin.inc.php#L211-L214 And _clamdaemonFile(): https://github.com/ulsdevteam/pkp-clamav/blob/9919574752bedcc00f574c93b87185291e47d742/ClamavPlugin.inc.php#L276-L280 can fall through the conditional without throwing an error or returning a value.

That means that $message is null here: https://github.com/ulsdevteam/pkp-clamav/blob/9919574752bedcc00f574c93b87185291e47d742/ClamavPlugin.inc.php#L339-L351