From c1be7d678506490b0acc5014367f8906b0ee5266 Mon Sep 17 00:00:00 2001 From: paul Date: Mon, 22 Sep 2025 18:59:49 +0200 Subject: [PATCH] Harden photo resolver path handling --- backend/src/services/photoResolver.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/backend/src/services/photoResolver.js b/backend/src/services/photoResolver.js index 9d8d81b..18e3f3c 100644 --- a/backend/src/services/photoResolver.js +++ b/backend/src/services/photoResolver.js @@ -1,5 +1,6 @@ const path = require('path'); const { resolveExternalPath } = require('./externalMediaService'); +const { safePathJoin } = require('../utils/fileSecurityUtils'); const getStoragePath = () => process.env.STORAGE_PATH || path.join(__dirname, '../../../storage'); @@ -33,10 +34,15 @@ function resolvePhotoFilePath(event, photo) { } const storagePath = getStoragePath(); + const eventsRoot = path.join(storagePath, 'events/active'); + if (photo.path && photo.path.startsWith('events/active/')) { - return path.join(storagePath, photo.path); + // Legacy paths already include prefix; normalize via safe join + return safePathJoin(storagePath, photo.path.replace(/^events\/active\/?/, 'events/active/')); } - return path.join(storagePath, 'events/active', photo.path || ''); + + const relativeSegment = photo.path ? photo.path.replace(/^\/+/, '') : ''; + return safePathJoin(eventsRoot, relativeSegment); } module.exports = {