From 4997cb3e6c41bc557c0ea79d097e2171737f64b9 Mon Sep 17 00:00:00 2001 From: ike709 Date: Sun, 5 Apr 2026 01:29:06 -0500 Subject: [PATCH 1/2] Update `params2list()` duplicate key behavior --- Content.Tests/DMProject/Tests/Builtins/params2list.dm | 2 +- OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Content.Tests/DMProject/Tests/Builtins/params2list.dm b/Content.Tests/DMProject/Tests/Builtins/params2list.dm index 835d18e572..f871acd6a3 100644 --- a/Content.Tests/DMProject/Tests/Builtins/params2list.dm +++ b/Content.Tests/DMProject/Tests/Builtins/params2list.dm @@ -3,4 +3,4 @@ ASSERT(json_encode(params2list("a;a;a")) == @#{"a":["","",""]}#) ASSERT(params2list("a=1;b=2") ~= list(a="1", b="2")) - ASSERT(params2list("a=1;a=2") ~= list(a="2")) + ASSERT(params2list("a=1;a=2")["a"] ~= list("1","2")) diff --git a/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs b/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs index 7e9e71c385..f77649328f 100644 --- a/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs +++ b/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs @@ -1886,9 +1886,11 @@ public static DreamList Params2List(DreamObjectTree objectTree, string queryStri } } } else { - string queryValue = queryValues[^1]; //Use the last appearance of the key in the query - - list.SetValue(new DreamValue(queryKey), new DreamValue(queryValue)); + // NOTE: At some point BYOND's handling of duplicate keys changed from "use the last value" to "create a list of values for that key" + if (queryValues.Length > 1) + list.SetValue(new DreamValue(queryKey), new DreamValue(objectTree.CreateList(queryValues))); + else + list.SetValue(new DreamValue(queryKey), new DreamValue(queryValues[0])); } } From 67d44c2942c53c93eb0e22c6f3b04d04208320cb Mon Sep 17 00:00:00 2001 From: ike709 Date: Mon, 6 Apr 2026 02:32:38 -0500 Subject: [PATCH 2/2] Apply suggestion from @ike709 --- OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs b/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs index f77649328f..592a4e73d1 100644 --- a/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs +++ b/OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs @@ -1886,7 +1886,6 @@ public static DreamList Params2List(DreamObjectTree objectTree, string queryStri } } } else { - // NOTE: At some point BYOND's handling of duplicate keys changed from "use the last value" to "create a list of values for that key" if (queryValues.Length > 1) list.SetValue(new DreamValue(queryKey), new DreamValue(objectTree.CreateList(queryValues))); else