Describe the Bug
Since Version 25.12.5 (or maybe already in 25.12.4), if User A creates a page and instantly saves it (or only edits the Page Title) and User B wants to edit it, User B will get an Error.
The same Error also ocurrs if a User removes all content from a Page and then Saves it. If any other User besides the one that last saved it tries to edit it, they get an Error.
Steps to Reproduce
- Create a new Page with User A (any user) and save it without adding any Content
- Open the Page with any other User
- Click "Edit"
Expected Behaviour
The expected behavour would be that the user that wants to edit it can edit it.
Screenshots or Additional Context
Error
TypeError
BookStack\Util\HtmlDocument::getBody(): Return value must be of type DOMNode, null returned
Stacktrace
Details
#0 /home/ramel/projects/bookstack/app/Util/HtmlDocument.php(115): BookStack\Util\HtmlDocument->getBody()
#1 /home/ramel/projects/bookstack/app/Util/HtmlDocument.php(125): BookStack\Util\HtmlDocument->getBodyChildren()
#2 /home/ramel/projects/bookstack/app/Util/HtmlContentFilter.php(31): BookStack\Util\HtmlDocument->getBodyInnerHtml()
#3 /home/ramel/projects/bookstack/app/Util/HtmlContentFilter.php(41): BookStack\Util\HtmlContentFilter->filterDocument()
#4 /home/ramel/projects/bookstack/app/Entities/Tools/PageEditorData.php(75): BookStack\Util\HtmlContentFilter->filterString()
#5 /home/ramel/projects/bookstack/app/Entities/Tools/PageEditorData.php(24): BookStack\Entities\Tools\PageEditorData->build()
#6 /home/ramel/projects/bookstack/app/Entities/Controllers/PageController.php(205): BookStack\Entities\Tools\PageEditorData->__construct()
#7 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): BookStack\Entities\Controllers\PageController->edit()
#8 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\Routing\Controller->callAction()
#9 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(265): Illuminate\Routing\ControllerDispatcher->dispatch()
#10 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(211): Illuminate\Routing\Route->runController()
#11 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(822): Illuminate\Routing\Route->run()
#12 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Routing\Router->Illuminate\Routing\{closure}()
#13 /home/ramel/projects/bookstack/app/Http/Middleware/Authenticate.php(23): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#14 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): BookStack\Http\Middleware\Authenticate->handle()
#15 /home/ramel/projects/bookstack/app/Http/Middleware/Localization.php(32): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#16 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): BookStack\Http\Middleware\Localization->handle()
#17 /home/ramel/projects/bookstack/app/Http/Middleware/RunThemeActions.php(26): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#18 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): BookStack\Http\Middleware\RunThemeActions->handle()
#19 /home/ramel/projects/bookstack/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#20 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): BookStack\Http\Middleware\CheckEmailConfirmed->handle()
#21 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(87): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#22 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle()
#23 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(48): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#24 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\View\Middleware\ShareErrorsFromSession->handle()
#25 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(120): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#26 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(63): Illuminate\Session\Middleware\StartSession->handleStatefulRequest()
#27 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Session\Middleware\StartSession->handle()
#28 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(36): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#29 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle()
#30 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(74): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#31 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Cookie\Middleware\EncryptCookies->handle()
#32 /home/ramel/projects/bookstack/app/Http/Middleware/ApplyCspRules.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#33 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): BookStack\Http\Middleware\ApplyCspRules->handle()
#34 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#35 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(821): Illuminate\Pipeline\Pipeline->then()
#36 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\Routing\Router->runRouteWithinStack()
#37 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\Routing\Router->runRoute()
#38 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\Routing\Router->dispatchToRoute()
#39 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\Routing\Router->dispatch()
#40 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}()
#41 /home/ramel/projects/bookstack/app/Http/Middleware/PreventResponseCaching.php(28): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#42 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): BookStack\Http\Middleware\PreventResponseCaching->handle()
#43 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(58): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#44 /home/ramel/projects/bookstack/app/Http/Middleware/TrustProxies.php(41): Illuminate\Http\Middleware\TrustProxies->handle()
#45 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): BookStack\Http\Middleware\TrustProxies->handle()
#46 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#47 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
#48 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Foundation\Http\Middleware\TrimStrings->handle()
#49 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#50 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Http\Middleware\ValidatePostSize->handle()
#51 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#52 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle()
#53 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#54 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\Pipeline\Pipeline->then()
#55 /home/ramel/projects/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter()
#56 /home/ramel/projects/bookstack/public/index.php(23): Illuminate\Foundation\Http\Kernel->handle()
#57 {main}
Browser Details
Chrome
Exact BookStack Version
v25.12.5
Describe the Bug
Since Version 25.12.5 (or maybe already in 25.12.4), if User A creates a page and instantly saves it (or only edits the Page Title) and User B wants to edit it, User B will get an Error.
The same Error also ocurrs if a User removes all content from a Page and then Saves it. If any other User besides the one that last saved it tries to edit it, they get an Error.
Steps to Reproduce
Expected Behaviour
The expected behavour would be that the user that wants to edit it can edit it.
Screenshots or Additional Context
Error
TypeError
BookStack\Util\HtmlDocument::getBody(): Return value must be of type DOMNode, null returnedStacktrace
Details
Browser Details
Chrome
Exact BookStack Version
v25.12.5