From 4dc740a20f3cec18220efefef829dc27ac469f16 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 10 Jan 2025 15:15:06 -0500 Subject: [PATCH] fix: #12984, fix pids numeric sorting, handle non-integers --- src/topics/fork.js | 9 ++++++++- src/topics/posts.js | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/topics/fork.js b/src/topics/fork.js index e94da7f1c3..07111eecd1 100644 --- a/src/topics/fork.js +++ b/src/topics/fork.js @@ -24,7 +24,14 @@ module.exports = function (Topics) { throw new Error('[[error:invalid-pid]]'); } - pids.sort((a, b) => a - b); + if (pids.every(isFinite)) { + pids.sort((a, b) => a - b); + } else { + const pidsDatetime = (await db.sortedSetScores(`tid:${fromTid}:posts`, pids)).map(t => t || 0); + const map = pids.reduce((map, pid, idx) => map.set(pidsDatetime[idx], pid), new Map()); + pidsDatetime.sort((a, b) => a - b); + pids = pidsDatetime.map(key => map.get(key)); + } const mainPid = pids[0]; if (!cid) { diff --git a/src/topics/posts.js b/src/topics/posts.js index f7e37f100f..d9c20d3dc1 100644 --- a/src/topics/posts.js +++ b/src/topics/posts.js @@ -372,7 +372,7 @@ module.exports = function (Topics) { timestampISO: replyPids.length ? utils.toISOString(pidMap[replyPids[0]].timestamp) : undefined, }; - replyPids.sort((a, b) => parseInt(a, 10) - parseInt(b, 10)); + replyPids.sort((a, b) => pidMap[a].timestamp - pidMap[b].timestamp); replyPids.forEach((replyPid) => { const replyData = pidMap[replyPid];