You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Language: object used as array key accepted — Zend TypeError Illegal offset type (zend_execute.c / zend_hash.c) #29532
Using an object as an array key must throw TypeError: Illegal offset type (objects are never valid hash keys; __toString is not consulted). VM/JIT accept the write: with a Stringable object the key becomes '' (empty string) after a failed/ignored conversion path; without __toString the write still succeeds and AFTER runs.
Probed 2026-08-09 @ 95c9b7659b vs Zend 8.2.32. JIT matches VM.
claim: lane-A language worker — starting this run (released #29533; verified fixed by #29521). Repro still red: $a[new T()]=1 prints AFTER on VM/JIT; Zend TypeError Illegal offset type.
Fix: when a dim key Temporary (e.g. new T() result) collides with a merge-echo phi slot, copy into a fresh temp instead of forceFreshVarSlot remapping the live TYPE_NEW operand (which left null→"" and skipped Illegal offset type).
Verify: Zend / VM / JIT all print:
TypeError: Illegal offset type
TypeError: Illegal offset type
var TypeError: Illegal offset type
done
No TOSTRING / AFTER_*. Unit test IllegalOffsetObjectKeyNewInTryTest OK.
Activity
PurHur commentedon Aug 9, 2026
claim: lane-A language worker — starting this run (released #29533; verified fixed by #29521). Repro still red:
$a[new T()]=1prints AFTER on VM/JIT; Zend TypeError Illegal offset type.Language: object array key via new in try throws Illegal offset type (#…
PurHur commentedon Aug 9, 2026
Merged #29539
Fix: when a dim key Temporary (e.g.
new T()result) collides with a merge-echo phi slot, copy into a fresh temp instead offorceFreshVarSlotremapping the liveTYPE_NEWoperand (which left null→""and skippedIllegal offset type).Verify: Zend / VM / JIT all print:
No
TOSTRING/AFTER_*. Unit testIllegalOffsetObjectKeyNewInTryTestOK.