Skip to main content
Craft patched three RCE paths in October, then disclosed all of them on the same day
craft cms

Craft patched three RCE paths in October, then disclosed all of them on the same day

Two GitHub advisories published November 2 describe two ways to defeat Craft's guard against attacker-chosen classes — one via isset()'s blind spot on null, one via an incomplete DOMDocument blocklist that forgot ZipArchive and XMLWriter. Both were quietly fixed in 5.11.4, weeks before anyone outside Craft knew they existed.

2026-11-02 / 03 min
PHP 8.6's partial application: I ran it on RC3 so you don't trip on the footguns
php

PHP 8.6's partial application: I ran it on RC3 so you don't trip on the footguns

PHP 8.6 adds partial function application — load('node', ?) returns a closure. I ran it on the RC and hit three sharp edges: arguments evaluate at creation not call, extra args are silently ignored, and the ... placeholder leaks keys into optional parameters. Plus why Drupal contrib can't use it for years.

2026-10-22 / 04 min
PHP 8.6 flips three session defaults — Drupal already did
php

PHP 8.6 flips three session defaults — Drupal already did

PHP 8.6 turns on strict mode, httponly and SameSite=Lax by default. For a Drupal box that's a non-event for web traffic — Drupal forces all three. The real exposure is CLI scripts and SSO flows. Test, don't assume.

2026-10-13 / 04 min
The PHP attribute that yells at you for ignoring a return value: #[\NoDiscard] in 8.5
php

The PHP attribute that yells at you for ignoring a return value: #[\NoDiscard] in 8.5

PHP 8.5's #[\NoDiscard] makes the engine warn you when you call a function and throw away its result — the classic immutable-API footgun ($url->withScheme('https') that quietly did nothing). Why it's the rare attribute that improves your code by nagging you, where it fits in Drupal (Url, cache metadata, fluent withX() setters), the (void)-cast escape hatch, and why it only helps if your CI fails on warnings.

2026-09-07 / 03 min
Craft is becoming a Laravel app — a Drupal dev watches a CMS change engines mid-flight
craft cms

Craft is becoming a Laravel app — a Drupal dev watches a CMS change engines mid-flight

Craft 6 (alpha since May 2026) is a ground-up port from Yii onto Laravel, and can embed in an existing Laravel app. I lived Drupal's Symfony 'get off the island' in Drupal 8, so I have a haunted perspective: the framework swap is the right long-term bet and a short-term ecosystem earthquake. The questions that decide it aren't about Laravel — they're about the plugins.

2026-09-02 / 04 min
Subscribe to PHP