permit() signatures can be extracted from the mempool and submitted by anyone, or DoS'd by front-running the nonce; integrations that assume the permit caller equals the signer, or do not handle a permit failing because it was already used, can break or be griefed.
try token.permit(owner, address(this), v, deadline, vv, rr, ss) {} catch {}
require(token.allowance(owner, address(this)) >= v, "no allowance");
The SaferICO scanner runs 201 detectors over your Solidity source, SAFE-0056 among them. Paste an address or the source itself — a small per-scan fee, shown before you sign, or unlimited on any plan.