Retour à la leçonMission
Mission : le paiement qui fait planter tout le serveur
Protéger un système de paiement en jeu contre une transaction malformée sans faire planter le reste du serveur, et diagnostiquer une mauvaise utilisation de pcall.
Contexte
Un script de paiement en jeu contient cette fonction, appelée à chaque transaction :
lua
local function processPayment(amount, taxRate)
if taxRate == 0 then
error("taux de taxe invalide")
end
return amount / taxRate
end
-- Appelé directement, sans protection, pour chaque transaction reçue
local total = processPayment(100, 0) -- fait planter TOUT le serveur pour TOUS les joueurs
print("Total: " .. total)Un joueur a envoyé une requête avec un taxRate à 0 (bug côté client), et le serveur entier a crashé, déconnectant tous les joueurs en cours de partie. Un développeur a ensuite ajouté un pcall, mais mal utilisé :
lua
local result = pcall(processPayment, 100, 0)
print("Total: " .. result) -- affiche "Total: false" au lieu de gérer l'erreur !