Ce qui se passe
En 2014, Jake A. Smith écrit 174 lignes de PHP pour accompagner la
migration du gestionnaire de contenu d'AOL de PHP 5.2 vers 5.3. Cette montée de
version faisait disparaître la version 1 de l'extension pecl_http, et avec
elle la fonction http_build_url(), appelée à des dizaines d'endroits dans le
code. Plutôt que de réécrire ces appels, il réimplémente la fonction, définie
seulement si la vraie est absente. Il la publie sur Packagist au cas où.
Douze ans plus tard, il la marque comme dépréciée.
L'ampleur, en chiffres
- Près de 20 millions d'installations depuis Packagist.
- Encore plus de 400 000 installations par mois.
- WPML, l'extension multilingue la plus installée de WordPress, embarque le polyfill directement dans son code et revendique plus de 1,5 million de sites.
- La bibliothèque de noms de domaine idna-convert en dépend, ce qui l'a fait entrer dans les sources de SPIP, puis dans les paquets Debian et Ubuntu.
Le bug qui a tenu douze ans
Sous un commentaire annonçant un contournement pour les barres obliques finales,
le code ajoute la lettre a au chemin pour garantir l'existence d'un dernier
segment, puis retire ce segment par un simple remplacement de texte. Quand le
chemin se termine déjà par /, ce dernier segment est le a ajouté — et le
remplacement emporte alors tous les autres a du chemin.
Le ticket dormait sur GitHub. L'auteur avait demandé un repreneur dès 2021 ; trois personnes s'étaient proposées, et un deuil familial a fait passer le sujet à l'arrière-plan.
Pourquoi ne pas transmettre le paquet
C'est la partie intéressante de la décision. Céder un paquet très installé à un
mainteneur que personne en aval n'a vérifié est exactement le scénario
recherché par un attaquant — celui de la porte dérobée d'xz Utils. Maintenir
le paquet, de son côté, ne ferait que retarder la migration que tout le monde
devrait faire. Le paquet continuera donc de s'installer, sans recevoir de
correctif, pas même pour le bug du a : après autant d'années sans changement,
même une correction d'une ligne pourrait casser un usage existant sans personne
pour le suivre.
Ce qu'il faut faire à la place
Deux remplacements, tous deux recommandés par l'auteur :
league/uri, la bibliothèque du PHP League, réponse de la communauté depuis des années ;- l'API URI native de PHP 8.5, conforme aux standards, livrée dans le langage.
Le README du paquet documente la bascule.
Source : My temporary PHP fix from 2014 has nearly 20M installs. Today I'm deprecating it., Jake A. Smith, 15 septembre 2026.