summaryrefslogtreecommitdiff
path: root/packages/backend/src
diff options
context:
space:
mode:
authorHazelnoot <acomputerdog@gmail.com>2025-03-03 16:31:24 +0000
committerHazelnoot <acomputerdog@gmail.com>2025-03-03 16:31:24 +0000
commit7d61bf73040f7f3d85365c7f44c283beaee7be6c (patch)
tree682e24b7f39489a3abca9de9a91cd52b28fe28dc /packages/backend/src
parentmerge: Bump develop version (!928) (diff)
parentsmall change to comment (diff)
downloadsharkey-7d61bf73040f7f3d85365c7f44c283beaee7be6c.tar.gz
sharkey-7d61bf73040f7f3d85365c7f44c283beaee7be6c.tar.bz2
sharkey-7d61bf73040f7f3d85365c7f44c283beaee7be6c.zip
merge: fix: always clone the note before hideNote (!931)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/931 Approved-by: dakkar <dakkar@thenautilus.net> Approved-by: Hazelnoot <acomputerdog@gmail.com>
Diffstat (limited to 'packages/backend/src')
-rw-r--r--packages/backend/src/server/api/stream/channel.ts11
1 files changed, 6 insertions, 5 deletions
diff --git a/packages/backend/src/server/api/stream/channel.ts b/packages/backend/src/server/api/stream/channel.ts
index 7a6193ccfc..5189c86de8 100644
--- a/packages/backend/src/server/api/stream/channel.ts
+++ b/packages/backend/src/server/api/stream/channel.ts
@@ -82,6 +82,11 @@ export default abstract class Channel {
return false;
}
+ /**
+ * This function modifies {@link note}, please make sure it has been shallow cloned.
+ * See Dakkar's comment of {@link assignMyReaction} for more
+ * @param note The note to change
+ */
protected async hideNote(note: Packed<'Note'>): Promise<void> {
if (note.renote) {
await this.hideNote(note.renote);
@@ -122,7 +127,6 @@ export default abstract class Channel {
public onMessage?(type: string, body: JsonValue): void;
public async assignMyReaction(note: Packed<'Note'>): Promise<Packed<'Note'>> {
- let changed = false;
// StreamingApiServerService creates a single EventEmitter per server process,
// so a new note arriving from redis gets de-serialised once per server process,
// and then that single object is passed to all active channels on each connection.
@@ -133,7 +137,6 @@ export default abstract class Channel {
if (note.renote && Object.keys(note.renote.reactions).length > 0) {
const myReaction = await this.noteEntityService.populateMyReaction(note.renote, this.user.id);
if (myReaction) {
- changed = true;
clonedNote.renote = { ...note.renote };
clonedNote.renote.myReaction = myReaction;
}
@@ -141,7 +144,6 @@ export default abstract class Channel {
if (note.renote?.reply && Object.keys(note.renote.reply.reactions).length > 0) {
const myReaction = await this.noteEntityService.populateMyReaction(note.renote.reply, this.user.id);
if (myReaction) {
- changed = true;
clonedNote.renote = { ...note.renote };
clonedNote.renote.reply = { ...note.renote.reply };
clonedNote.renote.reply.myReaction = myReaction;
@@ -151,12 +153,11 @@ export default abstract class Channel {
if (this.user && note.reply && Object.keys(note.reply.reactions).length > 0) {
const myReaction = await this.noteEntityService.populateMyReaction(note.reply, this.user.id);
if (myReaction) {
- changed = true;
clonedNote.reply = { ...note.reply };
clonedNote.reply.myReaction = myReaction;
}
}
- return changed ? clonedNote : note;
+ return clonedNote;
}
}