From c1a290e7bc7dd7780e35f5f1c8d6d8050431a0e7 Mon Sep 17 00:00:00 2001 From: Matt Isenhower Date: Sat, 31 Jan 2026 20:03:48 -0800 Subject: [PATCH] Add null/bounds checks for media arrays and Splatfest results Guard against accessing undefined media arrays in FileWriter, ImageWriter, and protect against findIndex returning -1 in SplatfestResultsBox. Co-Authored-By: Claude Opus 4.5 --- app/social/clients/FileWriter.mjs | 24 +++++++++++++----------- app/social/clients/ImageWriter.mjs | 4 ++++ src/components/SplatfestResultsBox.vue | 4 ++-- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/app/social/clients/FileWriter.mjs b/app/social/clients/FileWriter.mjs index 44f474f..ea40d3d 100644 --- a/app/social/clients/FileWriter.mjs +++ b/app/social/clients/FileWriter.mjs @@ -11,18 +11,20 @@ export default class FileWriter extends Client { async send(status, generator) { await mkdirp(this.dir); - let imgFilename = `${this.dir}/${generator.key}.png`; - await fs.writeFile(imgFilename, status.media[0].file); + if (status.media?.length > 0) { + let imgFilename = `${this.dir}/${generator.key}.png`; + await fs.writeFile(imgFilename, status.media[0].file); - let text = [ - 'Status:', - status.status, - '', - 'Alt text:', - status.media[0].altText, - ].join('\n'); + let text = [ + 'Status:', + status.status, + '', + 'Alt text:', + status.media[0].altText, + ].join('\n'); - let textFilename = `${this.dir}/${generator.key}.txt`; - await fs.writeFile(textFilename, text); + let textFilename = `${this.dir}/${generator.key}.txt`; + await fs.writeFile(textFilename, text); + } } } diff --git a/app/social/clients/ImageWriter.mjs b/app/social/clients/ImageWriter.mjs index 9560d2e..08fb465 100644 --- a/app/social/clients/ImageWriter.mjs +++ b/app/social/clients/ImageWriter.mjs @@ -9,6 +9,10 @@ export default class ImageWriter extends Client { dir = 'dist/status-screenshots'; // `/screenshots` points to the page used by puppeteer async send(status, generator) { + if (!status.media?.length) { + return; + } + await mkdirp(this.dir); let imgFilename = `${this.dir}/${generator.key}.png`; diff --git a/src/components/SplatfestResultsBox.vue b/src/components/SplatfestResultsBox.vue index 660f9a7..7c32d0d 100644 --- a/src/components/SplatfestResultsBox.vue +++ b/src/components/SplatfestResultsBox.vue @@ -1,5 +1,5 @@