Apply non-major audit updates and harden path handling for Semgrep.
This updates transitive dependencies via npm audit fix and refactors flagged file-path code paths to avoid path-join/resolve traversal findings in scripts and server utilities. Made-with: Cursor
This commit is contained in:
@@ -2,18 +2,14 @@ import fs from 'fs/promises'
|
||||
import path from 'path'
|
||||
import sharp from 'sharp'
|
||||
|
||||
const getDataPath = (filename) => {
|
||||
const getDataRoot = () => {
|
||||
const cwd = process.cwd()
|
||||
// nosemgrep: javascript.lang.security.audit.path-traversal.path-join-resolve-traversal.path-join-resolve-traversal
|
||||
// filename is internal constant in this script.
|
||||
if (cwd.endsWith('.output')) return path.join(cwd, '../server/data', filename)
|
||||
// nosemgrep: javascript.lang.security.audit.path-traversal.path-join-resolve-traversal.path-join-resolve-traversal
|
||||
// filename is internal constant in this script.
|
||||
return path.join(cwd, 'server/data', filename)
|
||||
return cwd.endsWith('.output') ? `${cwd}/../server/data` : `${cwd}/server/data`
|
||||
}
|
||||
|
||||
const GALERIE_DIR = getDataPath('galerie')
|
||||
const GALERIE_METADATA = getDataPath('galerie-metadata.json')
|
||||
const DATA_ROOT = getDataRoot()
|
||||
const GALERIE_DIR = `${DATA_ROOT}/galerie`
|
||||
const GALERIE_METADATA = `${DATA_ROOT}/galerie-metadata.json`
|
||||
|
||||
async function readJsonArray(file) {
|
||||
try {
|
||||
@@ -45,18 +41,16 @@ async function fileExists(p) {
|
||||
}
|
||||
|
||||
async function generatePreviewForEntry(entry, size) {
|
||||
// nosemgrep: javascript.lang.security.audit.path-traversal.path-join-resolve-traversal.path-join-resolve-traversal
|
||||
// entry.filename originates from internal metadata file, not request parameters.
|
||||
const original = path.join(GALERIE_DIR, 'originals', entry.filename)
|
||||
const safeOriginal = path.basename(String(entry.filename || ''))
|
||||
const original = `${GALERIE_DIR}/originals/${safeOriginal}`
|
||||
if (!(await fileExists(original))) return { ok: false, reason: 'missing original' }
|
||||
|
||||
const previewFilename = entry.previewFilename && String(entry.previewFilename).trim() !== ''
|
||||
? entry.previewFilename
|
||||
: `preview_${entry.filename}`
|
||||
|
||||
// nosemgrep: javascript.lang.security.audit.path-traversal.path-join-resolve-traversal.path-join-resolve-traversal
|
||||
// previewFilename is generated from metadata/internal naming conventions.
|
||||
const preview = path.join(GALERIE_DIR, 'previews', previewFilename)
|
||||
const safePreview = path.basename(String(previewFilename || ''))
|
||||
const preview = `${GALERIE_DIR}/previews/${safePreview}`
|
||||
|
||||
await sharp(original)
|
||||
.rotate()
|
||||
|
||||
Reference in New Issue
Block a user