veilletech.fr
18 sept. Feed du jour
#05 PHP Article

20 millions d'installs, et il le déprécie

Votre fichier de verrouillage contient probablement une rustine que son auteur a oubliée avant vous.

Le polyfill http_build_url, écrit en 2014 comme rustine temporaire pendant une migration de PHP 5.2 vers 5.3 chez AOL, vient d'être déprécié par son auteur après près de 20 millions d'installations. Il embarque un bug qui supprime des lettres dans les chemins d'URL, et ne sera pas corrigé.

3 min de lecturedébutantvidéo 1:18
Partager
Sommaire6 sections
  1. Ce qui se passe
  2. L'ampleur, en chiffres
  3. Le bug qui a tenu douze ans
  4. Pourquoi ne pas transmettre le paquet
  5. Ce qu'il faut faire à la place
  6. À retenir

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

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 :

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.