From c93059a86597ef1ea4e01ae14e796f81171e9345 Mon Sep 17 00:00:00 2001 From: Xurkon Date: Sat, 21 Mar 2026 15:36:13 -0500 Subject: [PATCH] Deploy v1.4.4r6 AceSerializer hotfix --- CHANGELOG.md | 4 ++++ Libs/AceSerializer-3.0/AceSerializer-3.0.lua | 11 +++++++++-- docs/changelog.html | 7 +++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ebdb306..235f0f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## v1.4.4r6 — Questie-X Network Deserialization Fix + +- **[Network Fix]** Resolved a critical crash ("`Usage: AceSerializer:Deserialize(str): str must be a string, got table`") occurring in QuestieLearnerComms and Export functions. This was caused by a lightweight, customized `AceSerializer-3.0.lua` implementation in Questie-X that lacked proper `self` parameter handling for standard colon-syntax method calls (`:`). As a result, method calls were serializing/deserializing the library table itself instead of the intended payload string. We patched `AceSerializer` natively to dynamically support both dot (`.`) and colon (`:`) syntax seamlessly without dropping arguments, while ensuring `Deserialize` correctly yields `(success, result)` tuples expected by the calling functions. + ## v1.4.4r5 — Comprehensive LibDeflate Taint Fix - **[Network Fix]** Expanded the previous LibDeflate network crash hotfix: completely purged all 71 instances of unsafe `#` -> `table.getn` replacements injected by earlier vanilla compatibility automation throughout `LibDeflate.lua`. These have been wrapped with a custom dual-typed safe access function that flawlessly determines whether to compute properties natively via `string.len(x)` for strings or the standard `table.getn(x)` for structured tables—guaranteeing 100% stable networking cross-client from 1.12 to 3.3.5 and upwards. diff --git a/Libs/AceSerializer-3.0/AceSerializer-3.0.lua b/Libs/AceSerializer-3.0/AceSerializer-3.0.lua index 1f81670..ec51fb9 100644 --- a/Libs/AceSerializer-3.0/AceSerializer-3.0.lua +++ b/Libs/AceSerializer-3.0/AceSerializer-3.0.lua @@ -77,7 +77,10 @@ local function Serialize(t) return strjoin("", s) end -AceSerializer.Serialize = Serialize +AceSerializer.Serialize = function(self, t) + local target = (self == AceSerializer or (type(self) == "table" and AceSerializer.embeds[self])) and t or self + return Serialize(target) +end local function Deserialize(s) if type(s) ~= "string" then @@ -180,7 +183,11 @@ local function Deserialize(s) return value end -AceSerializer.Deserialize = Deserialize +AceSerializer.Deserialize = function(self, s) + local str = (self == AceSerializer or (type(self) == "table" and AceSerializer.embeds[self])) and s or self + local ok, res = pcall(Deserialize, str) + if ok then return true, res else return false, res end +end -- http://lua-users.org/wiki/Base64EncoderAndDecoder local b64 = { diff --git a/docs/changelog.html b/docs/changelog.html index f2c595c..5b9ca79 100644 --- a/docs/changelog.html +++ b/docs/changelog.html @@ -348,6 +348,13 @@
+

v1.4.4r6 — Questie-X Network Deserialization Fix

+ + +
+

v1.4.4r5 — Comprehensive LibDeflate Taint Fix