Retour à la leçon
Mission

Mission : la commande /tp qui accepte n'importe quoi

Corriger un parseur de commande de chat qui valide mal ses arguments à cause de patterns Lua mal échappés ou trop permissifs.

Contexte

Un script serveur parse les commandes de chat des joueurs pour extraire une commande et ses arguments :

lua
local function parseCommand(message)
  local cmd, args = string.match(message, "^/(%a+)%s+(.+)$")
  return cmd, args
end

local cmd, args = parseCommand("/tp 100 50 20")
print(cmd, args)   -- "tp"  "100 50 20"

-- Le script doit aussi valider un prix affiché au joueur, format "9.99"
local function isValidPrice(s)
  return string.match(s, "^%d+.%d%d$") ~= nil
end
print(isValidPrice("9.99"))    -- true, attendu
print(isValidPrice("9x99"))    -- true aussi ! ne devrait pourtant PAS être un prix valide

L'équipe QA signale que isValidPrice accepte des chaînes qui ne sont clairement pas des prix, ce qui laisse passer des données invalides dans le système de boutique.