Skip to content

fix: avoid null array offset in rex_list::getSortColumn() under PHP 8.5#6586

Merged
gharlan merged 3 commits into
redaxo:5.xfrom
tbaddade:fix/rex-list-sort-null-offset-php85
Jul 10, 2026
Merged

fix: avoid null array offset in rex_list::getSortColumn() under PHP 8.5#6586
gharlan merged 3 commits into
redaxo:5.xfrom
tbaddade:fix/rex-list-sort-null-offset-php85

Conversation

@tbaddade

@tbaddade tbaddade commented Jul 8, 2026

Copy link
Copy Markdown
Member

Problem

Auf PHP 8.5 erscheint beim Rendern einer rex_list die Deprecation:

Using null as an array offset is deprecated, use an empty string instead — in redaxo/src/core/lib/list.php (rex_list::hasColumnOption(), via getSortColumn())

Ablauf:

  1. getSortColumn() prüft if (rex_request('list', 'string') == $this->getName()).
  2. Ist der list-Parameter gesetzt, aber kein sort-Parameter, liefert rex_request('sort', 'string', $default) mit $default === null$sortColumn = null.
  3. hasColumnOption($sortColumn, …) führt dann isset($this->columnOptions[null][…]) aus.
  4. Seit PHP 8.5 wirft ein null-Array-Offset die Deprecation auch innerhalb von isset()/empty()/?? — bis 8.4 wurde das stillschweigend als '' toleriert.

Gut reproduzierbar in der Metainfo-Feldverwaltung: Nach dem Speichern eines Feldes trägt die Rücksprung-URL list=…, aber kein sort=… → die Meldung erscheint. Beim direkten Aufruf der Übersicht (ohne list-Parameter) wird der Zweig übersprungen, daher tritt sie dort nicht auf.

Der betroffene Code-Pfad wurde mit der Sortier-Spalten-Whitelist-Validierung aus #6580 eingeführt.

Fix

Null-Guard vor dem hasColumnOption()-Aufruf:

if (null !== $sortColumn && $this->hasColumnOption($sortColumn, REX_LIST_OPT_SORT)) {
    return $sortColumn;
}

Verhaltensneutral: Ist die angeforderte Sortier-Spalte nicht gesetzt oder nicht in der Whitelist, gibt getSortColumn() weiterhin $default zurück.

Test

  • php -l fehlerfrei.
  • Getestet gegen PHP 8.5.7: isset($arr[null][null]) löst die Deprecation aus, mit Guard nicht mehr.

🤖 Generated with Claude Code

When the `list` request parameter matches the list name but no `sort`
parameter is present, `$sortColumn` is null. Passing it to
hasColumnOption() results in isset($this->columnOptions[null][...]).

Since PHP 8.5, using null as an array offset raises a deprecation even
inside isset()/empty()/?? (it was silently tolerated up to 8.4), so this
emits "Using null as an array offset is deprecated" on every affected
list render (e.g. the metainfo field list after saving a field, where
the return URL carries `list=` but not `sort`).

The null check short-circuits before hasColumnOption() and keeps the
existing behaviour: getSortColumn() still returns $default when the
requested sort column is missing or not whitelisted.

The affected code path was introduced with the sort-column whitelist
validation in redaxo#6580.
@rex-bot rex-bot added the bug label Jul 8, 2026
@gharlan

gharlan commented Jul 10, 2026

Copy link
Copy Markdown
Member

/baseline
https://github.com/redaxo/core/actions/runs/29105908174

@gharlan
gharlan merged commit fb008b5 into redaxo:5.x Jul 10, 2026
16 checks passed
@gharlan gharlan added this to the REDAXO 5.21.3 milestone Jul 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Development

Successfully merging this pull request may close these issues.

3 participants