getkirby / kirby

Kirby's core application folder
https://getkirby.com
Other
1.31k stars 168 forks source link

[3.4.0 RC2] Invalid YAML data. Please pass a string #2679

Closed nilshoerrmann closed 4 years ago

nilshoerrmann commented 4 years ago

Describe the bug
Upgrading to 3.4.0-rc.2 throws an error on the front-end:

Kirby \ Exception \ InvalidArgumentException (error.invalidArgument)
Invalid YAML data. Please pass a string
Stacktrace
#52 Kirby\Exception\InvalidArgumentException in .../kirby/src/Data/Yaml.php:59
#51 Kirby\Data\Yaml:decode in .../kirby/src/Data/Data.php:84
#50 Kirby\Data\Data:decode in .../kirby/config/methods.php:68
#49 Kirby\Cms\App:{closure} in .../kirby/src/Cms/Field.php:79
#48 Kirby\Cms\Field:__call in .../kirby/config/methods.php:204
#47 Kirby\Cms\App:{closure} in .../kirby/src/Cms/Field.php:79
#46 Kirby\Cms\Field:__call in .../kirby/config/methods.php:193
#45 Kirby\Cms\App:{closure} in .../kirby/src/Cms/Field.php:79
#44 Kirby\Cms\Field:__call in .../site/snippets/modules/overview-tracks.php:21
#43 include in .../kirby/src/Toolkit/F.php:400
#42 Kirby\Toolkit\F:loadIsolated in .../kirby/src/Toolkit/F.php:377
#41 Kirby\Toolkit\F:load in .../kirby/src/Toolkit/Tpl.php:35
#40 Kirby\Toolkit\Tpl:load in .../kirby/config/components.php:287
#39 Kirby\Cms\App:{closure} in .../kirby/src/Cms/App.php:1349
#38 Kirby\Cms\App:snippet in .../kirby/config/helpers.php:699
#37 snippet in .../site/snippets/modules/overview.php:2
#36 include in .../kirby/src/Toolkit/F.php:400
#35 Kirby\Toolkit\F:loadIsolated in .../kirby/src/Toolkit/F.php:377
#34 Kirby\Toolkit\F:load in .../kirby/src/Toolkit/Tpl.php:35
#33 Kirby\Toolkit\Tpl:load in .../kirby/config/components.php:287
#32 Kirby\Cms\App:{closure} in .../kirby/src/Cms/App.php:1349
#31 Kirby\Cms\App:snippet in .../kirby/config/helpers.php:699
#30 snippet in .../site/snippets/modules/body.php:3
#29 include in .../kirby/src/Toolkit/F.php:400
#28 Kirby\Toolkit\F:loadIsolated in .../kirby/src/Toolkit/F.php:377
#27 Kirby\Toolkit\F:load in .../kirby/src/Toolkit/Tpl.php:35
#26 Kirby\Toolkit\Tpl:load in .../kirby/config/components.php:287
#25 Kirby\Cms\App:{closure} in .../kirby/src/Cms/App.php:1349
#24 Kirby\Cms\App:snippet in .../kirby/config/helpers.php:699
#23 snippet in .../site/snippets/layouts/base.php:5
#22 include in .../kirby/src/Toolkit/F.php:400
#21 Kirby\Toolkit\F:loadIsolated in .../kirby/src/Toolkit/F.php:377
#20 Kirby\Toolkit\F:load in .../kirby/src/Toolkit/Tpl.php:35
#19 Kirby\Toolkit\Tpl:load in .../kirby/config/components.php:287
#18 Kirby\Cms\App:{closure} in .../kirby/src/Cms/App.php:1349
#17 Kirby\Cms\App:snippet in .../kirby/config/helpers.php:699
#16 snippet in .../site/snippets/site.php:18
#15 include in .../kirby/src/Toolkit/F.php:400
#14 Kirby\Toolkit\F:loadIsolated in .../kirby/src/Toolkit/F.php:377
#13 Kirby\Toolkit\F:load in .../kirby/src/Toolkit/Tpl.php:35
#12 Kirby\Toolkit\Tpl:load in .../kirby/config/components.php:287
#11 Kirby\Cms\App:{closure} in .../kirby/src/Cms/App.php:1349
#10 Kirby\Cms\App:snippet in .../kirby/config/helpers.php:699
#9 snippet in .../site/templates/home.php:2
#8 include in .../kirby/src/Toolkit/F.php:400
#7 Kirby\Toolkit\F:loadIsolated in .../kirby/src/Toolkit/F.php:377
#6 Kirby\Toolkit\F:load in .../kirby/src/Toolkit/Tpl.php:35
#5 Kirby\Toolkit\Tpl:load in .../site/plugins/minify-html/index.php:14
#4 MinifyHTML:render in .../kirby/src/Cms/Page.php:1200
#3 Kirby\Cms\Page:render in .../kirby/src/Cms/App.php:655
#2 Kirby\Cms\App:io in .../kirby/src/Cms/App.php:1004
#1 Kirby\Cms\App:render in .../index.php:4
#0 require in /Users/.../.composer/vendor/laravel/valet/server.php:191

To Reproduce
This is caused by a call to toPage() on a field:

<?php snippet(['modules/' . $notification->intendedTemplate()->name() . '-clip', 'modules/page-clip'], ['page' => $notification->reference()->toPage()])?>

Expected behavior
No error. It worked before and broke with this commit: https://github.com/getkirby/kirby/commit/03a8ef30db8da06d0aa323f05975bf82f97c92be

Kirby Version
3.4.0-rc.2

nilshoerrmann commented 4 years ago

So I found the source of the issue and it's not Kirby's fault: it was caused by a virtual page that had the field value already set to a page object. Before 3.4, Kirby just didn't validate the input and silently passed it on.