Skip page content without custom URL in RoutingCacheBuilder::getCustomUrls()
authorTim Düsterhus <duesterhus@woltlab.com>
Wed, 1 Jun 2022 14:30:28 +0000 (16:30 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Wed, 1 Jun 2022 14:37:06 +0000 (16:37 +0200)
commit21d5f3d8e4da7c9fb4c3057de28d0780740938fa
treee03785095c970a96ebbfa0ea0c97f9dff177fc60
parent55be65c8c23535a64346d58e874fd7bc0ac1630e
Skip page content without custom URL in RoutingCacheBuilder::getCustomUrls()

This select was missing this condition ever since it was added in commit
c2de61fb187cf357cd9653693a8fa7cad39ca6ef. It is not entirely clear, why this
condition is missing, but everything indicates that this is a bug:

The customURL for the page content can only ever be missing for pages backed by
an actual controller (i.e. non-CMS pages).

All those pages having the same empty controller will lead to conflicts in the
resulting mapping table, with some undefined entry "winning" and ending up in
the table. This specifically nullifies the effort of clearing the custom URL
for non-i18n CMS pages that are landing pages. However by chance this all ends
up working as intended, because the look up of the custom URL for those CMS
pages will then result in an empty string for the controller, which is then
completely ignored by the route building, skipping the logic in
ControllerMap::isDefaultController() which relies on the empty controller
pointing to the landing page instead of some random page.

Clean this up by properly ignoring page content without a custom URL.
wcfsetup/install/files/lib/system/cache/builder/RoutingCacheBuilder.class.php