Skip to main content

[BUGFIX] Guard ConstantEditor with copy operator in constants

If copy operator '<' is used in TypoScript constants for a
constant with a constant editor configuration comment, the
"Call to member function getType() on null" exception is

Example TypoScript constants:

> # cat=custom/a; type=color; label=Primary Color
> plugin.tx_example.primaryColor = #282E31
> # cat=custom/a; type=color; label=Other Color
> plugin.tx_example.otherColor < plugin.tx_example.primaryColor

This may happen when a comment token stream is
handled multiple times without being reset properly.

Resolves: #99906
Related: #97816
Releases: main
Change-Id: I5c15a9bf194f8c24e7306213218e1b801fe7cb72
Reviewed-by: Oliver Bartsch <>
Tested-by: Christian Kuhn <>
Tested-by: core-ci <>
Reviewed-by: Christian Kuhn <>
Tested-by: Oliver Bartsch <>

[TASK] Align "Included PageTsConfig" with "Included TypoScript"

The "Included PageTsConfig" view is structurally
similar to "Included TypoScript": Include trees
are shown, conditions can be toggled.

Resolves: #99827
Related: #97816
Related: #99563
Related: #99576
Releases: main
Change-Id: I1149bef0ad1f2d2564ca7f45ad83825f73fa4e5b
Tested-by: Stefan Bürk <>
Reviewed-by: Jochen <>
Tested-by: core-ci <>
Tested-by: Jochen <>
Tested-by: Christian Kuhn <>
Reviewed-by: Christian Kuhn <>
Reviewed-by: Stefan Bürk <>

[TASK] Update note about new TypoScript parser

Resolves: #99818
Related: #97816
Releases: main
Change-Id: Ibc3e5dd98d75d1c1cb4de6e8fad1f7b662d3de75
Tested-by: Christian Kuhn <>
Tested-by: core-ci <>
Tested-by: Oliver Klee <>
Reviewed-by: Stefan Bürk <>
Tested-by: Stefan Bürk <>
Reviewed-by: Oliver Klee <>
Reviewed-by: Christian Kuhn <>

[TASK] Streamline TypoScript IncludeTree logic

The patch comes with a couple of changes for
the TypoScript IncludeTree construct:

* Identifiers are now unique within a tree. This
is needed especially in the Backend
TypoScript -> Included Template files rendering:
Before, showing content of single segments did
not work due to duplicate identifiers.

* getIdentifier() is hardened to throw an
exception if not initialized: This detail is
only needed for non-cache analysis purposes and
identifiers don't exist when getting trees from cache
in Frontend.

* To allow file includes relative to a parent file
include, they now have a "path" property that is
properly hand over to child includes. Relative
child includes now work with include_static
sys_template includes as well.

* RootInclude now has an identifier as well to
seed child includes which include the parent
identifier in their hash.

* Identifier hashes and cache identifiers are built
with fast xxh3 hash in favor of sha1() and
json_encode() is used in favor of serialize()
when hashing structures, if possible.

* Identifier hashes are created in the setter
instead of calling hash() in the caller.

* [end] and [global] lines are now parts of the
previous condition segment and don't create
one-line segments anymore.

* Tests are adapted to be a bit less noisy on
properties we're not interested in by using
another custom comparator.

Change-Id: I9c03edfcf29e2887c0ef70ce1692582524333bdf
Resolves: #99537
Related: #97816
Releases: main
Reviewed-by: Christian Kuhn <>
Reviewed-by: Benni Mack <>
Tested-by: Benni Mack <>
Tested-by: Christian Kuhn <>
Tested-by: Stefan Bürk <>
Reviewed-by: Stefan Bürk <>
Tested-by: core-ci <>

[BUGFIX] Resolve nested TypoScript reference operator

Incoming TS: = TEXT = foo =< = bar
page = PAGE
page.10 = CASE
page.10.key.field = cache_timeout
page.10.default =<
page.10.60 =<

page.10.60 is a reference to which sets the
sub property 'value' to 'bar'. itself is a
reference to which sets 'TEXT'. When the
cache timeout of a page is set to '60', string 'bar'
should be output.

This stopped working in main since the reference
resolving is not recursive anymore since #99060.

The patch fixes this and adds a unit test to verify.

Resolves: #99504
Related: #97816
Related: #99060
Releases: main
Change-Id: I560807db326559077658b36a61a137fec6cdbcb5
Tested-by: core-ci <>
Tested-by: Achim Fritz <>
Reviewed-by: Stefan Bürk <>
Reviewed-by: Achim Fritz <>
Tested-by: Stefan Bürk <>

[TASK] Remove obsolete hack in TsConfigTreeBuilder

UserTs building has a hack for sys_note setting and

These two fields have been removed from table sys_note
in 6.0, the options are useless and can be removed:
The creating user uid is stored in field 'cruser',
resolving to human readable names is done when rendering

Change-Id: I562678a516c7fc8284f82a1123035ce06bd7a188
Resolves: #99507
Related: #97816
Releaeses: main
Reviewed-by: Stefan Bürk <>
Tested-by: Stefan Bürk <>
Tested-by: Georg Ringer <>
Tested-by: core-ci <>
Reviewed-by: Georg Ringer <>