<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: rashid Blox</title>
    <description>The latest articles on DEV Community by rashid Blox (@rashid_blox_9ccd2350e4059).</description>
    <link>https://dev.to/rashid_blox_9ccd2350e4059</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2014816%2F0ff89528-39a4-42c7-b753-3021c7157b4d.png</url>
      <title>DEV Community: rashid Blox</title>
      <link>https://dev.to/rashid_blox_9ccd2350e4059</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rashid_blox_9ccd2350e4059"/>
    <language>en</language>
    <item>
      <title>this code in lua but l dont add GUI in lua what should do next to get work in anygame and this code from deep seej working code</title>
      <dc:creator>rashid Blox</dc:creator>
      <pubDate>Wed, 07 Oct 2026 06:53:00 +0000</pubDate>
      <link>https://dev.to/rashid_blox_9ccd2350e4059/this-code-in-lua-but-l-dont-add-gui-in-lua-what-should-do-next-to-get-work-in-anygame-and-this-code-23ok</link>
      <guid>https://dev.to/rashid_blox_9ccd2350e4059/this-code-in-lua-but-l-dont-add-gui-in-lua-what-should-do-next-to-get-work-in-anygame-and-this-code-23ok</guid>
      <description>&lt;p&gt;-- ============================================================&lt;br&gt;
--  INFINITE MONEY BUG: DEMO, EXPLOIT, AND FIX&lt;br&gt;
--  Run with: lua money_bug.lua&lt;br&gt;
-- ============================================================&lt;/p&gt;

&lt;p&gt;-- ============================================================&lt;br&gt;
-- PART 1: VULNERABLE PLAYER (the bug)&lt;br&gt;
-- ============================================================&lt;br&gt;
local VulnerablePlayer = {}&lt;br&gt;
VulnerablePlayer.__index = VulnerablePlayer&lt;/p&gt;

&lt;p&gt;function VulnerablePlayer.new(startingMoney)&lt;br&gt;
    return setmetatable({&lt;br&gt;
        money = startingMoney or 100,&lt;br&gt;
        lastTransaction = 0&lt;br&gt;
    }, VulnerablePlayer)&lt;br&gt;
end&lt;/p&gt;

&lt;p&gt;-- BUG: accepts negative amounts, no lock, no cap&lt;br&gt;
function VulnerablePlayer:transfer(amount, target)&lt;br&gt;
    if self.money &amp;gt;= amount then&lt;br&gt;
        self.money = self.money - amount&lt;br&gt;
        target.money = target.money + amount&lt;br&gt;
        return true&lt;br&gt;
    end&lt;br&gt;
    return false&lt;br&gt;
end&lt;/p&gt;

&lt;p&gt;-- BUG: no cooldown, spammable&lt;br&gt;
function VulnerablePlayer:claimDailyBonus(bonus)&lt;br&gt;
    self.money = self.money + bonus&lt;br&gt;
    return bonus&lt;br&gt;
end&lt;/p&gt;

&lt;p&gt;-- ============================================================&lt;br&gt;
-- PART 2: FIXED PLAYER&lt;br&gt;
-- ============================================================&lt;br&gt;
local Player = {}&lt;br&gt;
Player.__index = Player&lt;/p&gt;

&lt;p&gt;local MAX_MONEY       = 1e9        -- cap to prevent overflow&lt;br&gt;
local BONUS_COOLDOWN  = 86400      -- 24h in seconds&lt;br&gt;
local MIN_TRANSFER    = 1&lt;br&gt;
local MAX_TRANSFER    = 1e6&lt;/p&gt;

&lt;p&gt;function Player.new(startingMoney)&lt;br&gt;
    return setmetatable({&lt;br&gt;
        money          = math.max(0, math.min(startingMoney or 100, MAX_MONEY)),&lt;br&gt;
        lastBonusClaim = 0,&lt;br&gt;
        isProcessing   = false,    -- re-entrancy lock&lt;br&gt;
    }, Player)&lt;br&gt;
end&lt;/p&gt;

&lt;p&gt;-- FIX 1: validate amount (positive, in range, not NaN)&lt;br&gt;
-- FIX 2: re-entrancy lock (blocks race conditions)&lt;br&gt;
-- FIX 3: block self-transfer&lt;br&gt;
-- FIX 4: atomic apply via pcall&lt;br&gt;
function Player:transfer(amount, target)&lt;br&gt;
    if type(amount) ~= "number" or amount ~= amount then&lt;br&gt;
        return false, "Invalid amount"&lt;br&gt;
    end&lt;br&gt;
    if amount &amp;lt; MIN_TRANSFER or amount &amp;gt; MAX_TRANSFER then&lt;br&gt;
        return false, "Amount out of range"&lt;br&gt;
    end&lt;br&gt;
    if type(target) ~= "table" or type(target.money) ~= "number" then&lt;br&gt;
        return false, "Invalid target"&lt;br&gt;
    end&lt;br&gt;
    if self == target then&lt;br&gt;
        return false, "Cannot transfer to self"&lt;br&gt;
    end&lt;br&gt;
    if self.isProcessing or target.isProcessing then&lt;br&gt;
        return false, "Transaction in progress"&lt;br&gt;
    end&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;self.isProcessing   = true
target.isProcessing = true

local ok, err = pcall(function()
    if self.money &amp;lt; amount then
        error("Insufficient funds")
    end
    self.money   = self.money - amount
    target.money = math.min(target.money + amount, MAX_MONEY)
end)

self.isProcessing   = false
target.isProcessing = false

if not ok then return false, err end
return true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;end&lt;/p&gt;

&lt;p&gt;-- FIX 5: server-authoritative cooldown + cap&lt;br&gt;
function Player:claimDailyBonus(bonus, currentTime)&lt;br&gt;
    currentTime = currentTime or os.time()&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if currentTime - self.lastBonusClaim &amp;lt; BONUS_COOLDOWN then
    return false, "Bonus already claimed"
end

self.money          = math.min(self.money + bonus, MAX_MONEY)
self.lastBonusClaim = currentTime
return true, bonus
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;end&lt;/p&gt;

&lt;p&gt;-- ============================================================&lt;br&gt;
-- PART 3: TEST HARNESS&lt;br&gt;
-- ============================================================&lt;br&gt;
local function banner(title)&lt;br&gt;
    print("\n" .. string.rep("=", 60))&lt;br&gt;
    print(title)&lt;br&gt;
    print(string.rep("=", 60))&lt;br&gt;
end&lt;/p&gt;

&lt;p&gt;local function check(label, got, expected)&lt;br&gt;
    local pass = got == expected&lt;br&gt;
    print(string.format("  [%s] %-35s got=%s expected=%s",&lt;br&gt;
        pass and "PASS" or "FAIL", label, tostring(got), tostring(expected)))&lt;br&gt;
    return pass&lt;br&gt;
end&lt;/p&gt;

&lt;p&gt;-- ============================================================&lt;br&gt;
-- PART 4: EXPLOIT THE VULNERABLE VERSION&lt;br&gt;
-- ============================================================&lt;br&gt;
banner("EXPLOITING VULNERABLE VERSION")&lt;/p&gt;

&lt;p&gt;local v1 = VulnerablePlayer.new(100)&lt;br&gt;
local v2 = VulnerablePlayer.new(100)&lt;/p&gt;

&lt;p&gt;-- Exploit A: negative transfer drains the target&lt;br&gt;
v1:transfer(-1000, v2)&lt;br&gt;
print(("  Exploit A (negative transfer): v1=%d  v2=%d  &amp;lt;-- BUG"):format(v1.money, v2.money))&lt;/p&gt;

&lt;p&gt;-- Exploit B: spam the bonus (simulating 1000 calls in a single tick)&lt;br&gt;
for i = 1, 1000 do&lt;br&gt;
    v1:claimDailyBonus(50)&lt;br&gt;
end&lt;br&gt;
print(("  Exploit B (bonus spam):        v1=%d  &amp;lt;-- BUG"):format(v1.money))&lt;/p&gt;

&lt;p&gt;-- Exploit C: integer overflow (huge values)&lt;br&gt;
v1.money = MAX_MONEY&lt;br&gt;
v1:claimDailyBonus(MAX_MONEY)&lt;br&gt;
print(("  Exploit C (overflow):          v1=%s  &amp;lt;-- BUG"):format(tostring(v1.money)))&lt;/p&gt;

&lt;p&gt;-- ============================================================&lt;br&gt;
-- PART 5: VERIFY THE FIX&lt;br&gt;
-- ============================================================&lt;br&gt;
banner("VERIFYING FIXED VERSION")&lt;/p&gt;

&lt;p&gt;local p1 = Player.new(100)&lt;br&gt;
local p2 = Player.new(100)&lt;br&gt;
local now = os.time()&lt;br&gt;
local allPass = true&lt;/p&gt;

&lt;p&gt;-- Test 1: negative transfer rejected&lt;br&gt;
local ok, err = p1:transfer(-1000, p2)&lt;br&gt;
allPass = check("negative transfer rejected", ok, false) and allPass&lt;br&gt;
allPass = check("  error message", err, "Amount out of range") and allPass&lt;/p&gt;

&lt;p&gt;-- Test 2: zero transfer rejected&lt;br&gt;
ok, err = p1:transfer(0, p2)&lt;br&gt;
allPass = check("zero transfer rejected", ok, false) and allPass&lt;/p&gt;

&lt;p&gt;-- Test 3: self-transfer rejected&lt;br&gt;
ok, err = p1:transfer(50, p1)&lt;br&gt;
allPass = check("self-transfer rejected", ok, false) and allPass&lt;/p&gt;

&lt;p&gt;-- Test 4: valid transfer works&lt;br&gt;
ok = p1:transfer(50, p2)&lt;br&gt;
allPass = check("valid transfer succeeds", ok, true) and allPass&lt;br&gt;
allPass = check("  p1 balance", p1.money, 50) and allPass&lt;br&gt;
allPass = check("  p2 balance", p2.money, 150) and allPass&lt;/p&gt;

&lt;p&gt;-- Test 5: insufficient funds rejected&lt;br&gt;
ok, err = p1:transfer(999, p2)&lt;br&gt;
allPass = check("insufficient funds rejected", ok, false) and allPass&lt;/p&gt;

&lt;p&gt;-- Test 6: bonus spam — only 1 should succeed&lt;br&gt;
local count = 0&lt;br&gt;
for i = 1, 1000 do&lt;br&gt;
    if p1:claimDailyBonus(50, now) then count = count + 1 end&lt;br&gt;
end&lt;br&gt;
allPass = check("bonus claimed exactly once", count, 1) and allPass&lt;br&gt;
allPass = check("  p1 balance after bonus", p1.money, 100) and allPass&lt;/p&gt;

&lt;p&gt;-- Test 7: overflow capped&lt;br&gt;
p1.money = MAX_MONEY&lt;br&gt;
p1.lastBonusClaim = 0&lt;br&gt;
p1:claimDailyBonus(MAX_MONEY, now + BONUS_COOLDOWN + 1)&lt;br&gt;
allPass = check("overflow capped at MAX_MONEY", p1.money, MAX_MONEY) and allPass&lt;/p&gt;

&lt;p&gt;-- Test 8: NaN rejected&lt;br&gt;
ok, err = p1:transfer(0/0, p2)&lt;br&gt;
allPass = check("NaN amount rejected", ok, false) and allPass&lt;/p&gt;

&lt;p&gt;-- ============================================================&lt;br&gt;
-- PART 6: SUMMARY&lt;br&gt;
-- ============================================================&lt;/p&gt;

</description>
      <category>bug</category>
      <category>programming</category>
      <category>security</category>
    </item>
    <item>
      <title>sadam</title>
      <dc:creator>rashid Blox</dc:creator>
      <pubDate>Tue, 16 Sep 2025 08:29:16 +0000</pubDate>
      <link>https://dev.to/rashid_blox_9ccd2350e4059/sadam-3gga</link>
      <guid>https://dev.to/rashid_blox_9ccd2350e4059/sadam-3gga</guid>
      <description></description>
    </item>
    <item>
      <title>hi</title>
      <dc:creator>rashid Blox</dc:creator>
      <pubDate>Mon, 25 Aug 2025 04:40:27 +0000</pubDate>
      <link>https://dev.to/rashid_blox_9ccd2350e4059/hi-3369</link>
      <guid>https://dev.to/rashid_blox_9ccd2350e4059/hi-3369</guid>
      <description></description>
      <category>hi</category>
    </item>
  </channel>
</rss>
