From d58217ad9680ee40b7dad61e74514cdafbbddc68 Mon Sep 17 00:00:00 2001 From: Sei Lisa Date: Sun, 26 Feb 2023 09:41:46 +0100 Subject: [PATCH] Fix llDumpList2String disaster with string addition The node containing the separator was not being copied; if it was modified by a later optimization step, the modification propagated to all previous nodes that contained it, causing incorrect results. Many thanks to @KrsityKu for reporting and providing a repro. Fixes #23. --- lslopt/lslfuncopt.py | 2 +- unit_tests/regression.suite/issue-23.lsl | 11 +++++++++++ unit_tests/regression.suite/issue-23.out | 11 +++++++++++ unit_tests/regression.suite/issue-23.run | 1 + 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 unit_tests/regression.suite/issue-23.lsl create mode 100644 unit_tests/regression.suite/issue-23.out create mode 100644 unit_tests/regression.suite/issue-23.run diff --git a/lslopt/lslfuncopt.py b/lslopt/lslfuncopt.py index 809444d..91dc16c 100644 --- a/lslopt/lslfuncopt.py +++ b/lslopt/lslfuncopt.py @@ -305,7 +305,7 @@ def OptimizeFunc(self, parent, index): newnode = nr(nt='+', t='string', SEF=True, ch=[CastDL2S(self, child[0], i), nr(nt='+', t='string', SEF=True, - ch=[self.Cast(child[1], 'string'), newnode] + ch=[self.Cast(child[1], 'string').copy(), newnode] ) ]) parent[index] = newnode diff --git a/unit_tests/regression.suite/issue-23.lsl b/unit_tests/regression.suite/issue-23.lsl new file mode 100644 index 0000000..8195bed --- /dev/null +++ b/unit_tests/regression.suite/issue-23.lsl @@ -0,0 +1,11 @@ +default +{ + state_entry() + { + string tmp0 = llGetScriptName(); + list tmp1 = [llGetOwner(), llGetOwner()]; + list tmp2 = [llGetScriptName(), llGetScriptName()]; + string encoded = llDumpList2String([tmp0, llList2CSV(tmp1), "Hello", 123, llList2CSV(tmp2)], "|"); + llOwnerSay(encoded); + } +} diff --git a/unit_tests/regression.suite/issue-23.out b/unit_tests/regression.suite/issue-23.out new file mode 100644 index 0000000..8c27c48 --- /dev/null +++ b/unit_tests/regression.suite/issue-23.out @@ -0,0 +1,11 @@ +default +{ + state_entry() + { + string tmp0 = llGetScriptName(); + list tmp1 = (list)llGetOwner() + llGetOwner(); + list tmp2 = (list)llGetScriptName() + llGetScriptName(); + string encoded = tmp0 + ("|" + (llList2CSV(tmp1) + ("|Hello|123|" + llList2CSV(tmp2)))); + llOwnerSay(encoded); + } +} diff --git a/unit_tests/regression.suite/issue-23.run b/unit_tests/regression.suite/issue-23.run new file mode 100644 index 0000000..e76e2cd --- /dev/null +++ b/unit_tests/regression.suite/issue-23.run @@ -0,0 +1 @@ +./main.py -O addstrings -