Deploy v1.4.4r6 AceSerializer hotfix
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -348,6 +348,13 @@
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<h2 id="v144r6">v1.4.4r6 — Questie-X Network Deserialization Fix</h2>
|
||||
<ul>
|
||||
<li><strong>[Network Fix]</strong> Resolved a critical crash ("<code>Usage: AceSerializer:Deserialize(str): str must be a string, got table</code>") occurring in QuestieLearnerComms and Export functions. This was caused by a lightweight, customized <code>AceSerializer-3.0.lua</code> implementation in Questie-X that lacked proper <code>self</code> parameter handling for standard colon-syntax method calls (<code>:</code>). As a result, method calls were serializing/deserializing the library table itself instead of the intended payload string. We patched <code>AceSerializer</code> natively to dynamically support both dot (<code>.</code>) and colon (<code>:</code>) syntax seamlessly without dropping arguments, while ensuring <code>Deserialize</code> correctly yields <code>(success, result)</code> tuples expected by the calling functions.</li>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
|
||||
<h2 id="v144r5">v1.4.4r5 — Comprehensive LibDeflate Taint Fix</h2>
|
||||
<ul>
|
||||
<li><strong>[Network Fix]</strong> Expanded the previous LibDeflate network crash hotfix: completely purged all 71 instances of unsafe <code>#</code> -> <code>table.getn</code> replacements injected by earlier vanilla compatibility automation throughout <code>LibDeflate.lua</code>. These have been wrapped with a custom dual-typed safe access function that flawlessly determines whether to compute properties natively via <code>string.len(x)</code> for strings or the standard <code>table.getn(x)</code> for structured tables—guaranteeing 100% stable networking cross-client from 1.12 to 3.3.5 and upwards.</li>
|
||||
|
||||
Reference in New Issue
Block a user