rce-incorporated / Fiu

Luau bytecode interpreter for Luau
MIT License
91 stars 18 forks source link

Missing Values in SETLIST #16

Closed SnorlaxAssist closed 8 months ago

SnorlaxAssist commented 9 months ago
-- to bypass the table constant
local function a(b)
    return b
end

print({
    a("1"),
    a("2"),
    a("3")
})
{
    [1] = "1",
    [2] = "2"
} 

I do not have a PR for this. Issue located at SETLIST also having an extra minus 1, I'm not sure so far since in my testing I had weird behaviors when applying my own fix to SETLIST. I will follow up with a PR if I manage to find a stable fix.

SnorlaxAssist commented 9 months ago

Weird behaviors when removing the extra minus seems to have a named index in a list and an array side by side. for example: (potiental fix, SETLIST removing extra minus 1 in the operation)

local function a(b)
    return b
end

-- Fixed
print({
    a("1"),
    a("2"),
    a("3"),
})
-- Conflicting Issue
print({
    a("1"),
    a("2"),
    a("3"),
    name = a("SETLIST")
})
{
    [1] = "1",
    [2] = "2",
    [3] = "3"
} 
{
    [1] = "1",
    [2] = "2",
    [3] = "3",
    [4] = "3",
    name = "SETLIST"
} 
SnorlaxAssist commented 9 months ago

Technically, the extra minus isn't the problem, but a new weird thing occurred, found instruction "C" to vary in value though in the original Luau, C is 3 on both list, the first one and the second. But in Fiu, C is 2 on the first list, and 3 on the second, perhaps something off is going on in the deserialization?