Critical bug – Bug critique
-
Bonjour,
Comme je vous l’ai écrit sur votre Slack il y a 4 jours sans réponse, je vous écris au sujet d’un bug critique dans votre plugin Stancer for WooCommerce, reproduit sur mon site suite à des tentatives de commandes avortées (paiements non finalisés, commandes restées en statut “Draft”).
Environnement
- Plugin Stancer for WooCommerce version 1.4.3
- WooCommerce version 10.8.1 |
- WordPress version 7.0
- PHP version 8.3.30
Description du problème
Lorsqu’une commande WooCommerce est créée mais que le paiement Stancer n’est pas finalisé (commande en statut Draft, sans payment_id associé), l’ouverture de cette commande depuis l’interface d’administration WordPress génère une erreur PHP fatale qui rend la page inaccessible.
Erreur exacte dans le log de debug
PHP Fatal error: Uncaught Error: Typed property WC_Stancer_Payment::$payment_id must not be accessed before initialization in .../plugins/stancer/includes/class-stancer-abstract-table.php:108 Stack trace: #0 .../plugins/stancer/includes/class-stancer-capture.php(84): WC_Stancer_Abstract_Table->__get() #1 .../plugins/stancer/includes/class-stancer.php(70): WC_Stancer_Capture->__construct() #2 .../wp-includes/class-wp-hook.php(341): WC_Stancer->call_capture() ...Cause identifiée
La propriété typée
$payment_iddansWC_Stancer_Paymentest accédée via__get()dansclass-stancer-abstract-table.php(ligne 108) avant d’avoir été initialisée. Cela se produit lorsqueWC_Stancer_Capture->__construct()est appelé depuisWC_Stancer->call_capture()sur une commande ne disposant d’aucun paiement Stancer enregistré.En PHP 8+, accéder à une propriété typée non initialisée lève une
Errorfatale, contrairement à PHP 7 qui retournait simplementnull.Correction suggérée
Ajouter une vérification d’initialisation avant l’accès à
$payment_id, par exemple dansclass-stancer-abstract-table.php:// Avant return $this->payment_id; // Après return isset($this->payment_id) ? $this->payment_id : null;Ou, de manière équivalente, initialiser la propriété à
nulldans sa déclaration :protected ?string $payment_id = null;J’ai remarqué ce bug suite à de potentielles attaques et tentatives de carding.
En effet, j’ai vu ça en voyant qu’il y avait plusieurs commandes WooCommerce apparues dans la catégorie “Draft”.
Et en cliquant pour voir le détail des commandes ça me génère des erreurs critiques et affiche un message comme celui que j’envoie en capture et qui donne par exemple :
“Order #82984 details
Payment via Stancer. Customer IP: 216.244.66.239
There has been a critical error on this website. Please check your site admin email inbox for instructions. If you continue to have problems, please try the support forums.
Learn more about troubleshooting WordPress.”Ces commandes ont toutes étés faites à quelques heures d’intervalle avec des adresses IP différentes :
216.244.66.239(Tukwila Washington United States)
104.194.192.137 (Ashburn Virginia United States)
52.70.123.241 (Ashburn Virginia United States)
85.208.96.210 (Ashburn Virginia United States)
85.208.96.198 (Ashburn Virginia United States)
216.73.216.174 (Columbus Ohio United States)
82.38.231.40 (St Helens United Kingdom)Ce bug impacte directement l’administration du site : toute commande dans un état incomplet “Draft” (paiement abandonné, timeout, tentative échouée) rend la page de détail de commande inaccessible dans WordPress.
Merci de prendre en compte ce rapport et de publier un correctif dans une prochaine version du plugin.
Cordialement,
Jabe.
You must be logged in to reply to this topic.