Skip to content

fix: enforce mimeTypes restriction when useTempFiles is enabled#16236

Closed
eddieran wants to merge 4 commits intopayloadcms:mainfrom
eddieran:fix/mime-validation-tempfiles
Closed

fix: enforce mimeTypes restriction when useTempFiles is enabled#16236
eddieran wants to merge 4 commits intopayloadcms:mainfrom
eddieran:fix/mime-validation-tempfiles

Conversation

@eddieran
Copy link
Copy Markdown
Contributor

@eddieran eddieran commented Apr 10, 2026

Overview

Fixes MIME type validation being skipped on upload collections when upload.useTempFiles: true is set globally.

Key Changes

  • When file.data is empty (as it is with temp files), read content from file.tempFilePath before running validation
  • Removed the !useTempFiles gate that was causing the entire fallback validation block to be skipped

Design Decisions

The original code used the useTempFiles config flag to decide whether to run fallback validation, but checking tempFilePath directly is more accurate.

Files uploaded via the local API always have file.data populated even when useTempFiles is enabled.

Simply removing the gate (as originally suggested) would've fixed the extension check but left validateSvg broken, since it would still run on an empty buffer and always return safe.

Fixes #16233

eddieran and others added 3 commits April 10, 2026 08:53
When `useTempFiles` is true, `file.data` is an empty buffer so
`fileTypeFromBuffer` returns undefined. The fallback extension-based
validation was gated behind `!useTempFiles`, which meant it was skipped
entirely — allowing any file type to bypass MIME restrictions.

Remove the `!useTempFiles` condition so extension-based validation
always runs when buffer detection fails, regardless of temp file mode.

Fixes #16233

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@PatrikKozak PatrikKozak changed the title fix: apply extension-based MIME validation when useTempFiles is enabled fix: enforce mimeTypes restriction when useTempFiles is enabled Apr 10, 2026
@PatrikKozak PatrikKozak self-assigned this Apr 10, 2026
@PatrikKozak PatrikKozak self-requested a review April 10, 2026 13:32
@eddieran eddieran closed this by deleting the head repository Apr 11, 2026
PatrikKozak added a commit that referenced this pull request Apr 14, 2026
This replaces #16236 which was auto-closed when the fork was deleted.

# Overview

Fixes MIME type validation being skipped on upload collections when
`upload.useTempFiles: true` is set globally.

## Key Changes

- Use `fileTypeFromFile` for temp files instead of loading the full
buffer — avoids reading large files (e.g. 2GB video) into memory just
for MIME detection
- Removed the `!useTempFiles` gate that was causing the entire fallback
validation block to be skipped
- Added `tempFilePath` to the `File` type directly instead of
intersecting it at the call site
- Full file content is loaded lazily via `getFileBuffer()` and only when
needed for SVG/PDF content validation

## Design Decisions

The original code used the `useTempFiles` config flag to decide whether
to run fallback validation, but checking `tempFilePath` directly is more
accurate, files uploaded via the local API always have `file.data`
populated even when `useTempFiles` is enabled.

Simply removing the gate (as originally suggested) would've fixed the
extension check but left `validateSvg` broken, since it would still run
on an empty buffer and always return safe.

Fixes #16233.

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Patrik Kozak <35232443+PatrikKozak@users.noreply.github.com>
Co-authored-by: Paul Popus <paul@payloadcms.com>
milamer pushed a commit to milamer/payload that referenced this pull request Apr 20, 2026
…oadcms#16255)

This replaces payloadcms#16236 which was auto-closed when the fork was deleted.

# Overview

Fixes MIME type validation being skipped on upload collections when
`upload.useTempFiles: true` is set globally.

## Key Changes

- Use `fileTypeFromFile` for temp files instead of loading the full
buffer — avoids reading large files (e.g. 2GB video) into memory just
for MIME detection
- Removed the `!useTempFiles` gate that was causing the entire fallback
validation block to be skipped
- Added `tempFilePath` to the `File` type directly instead of
intersecting it at the call site
- Full file content is loaded lazily via `getFileBuffer()` and only when
needed for SVG/PDF content validation

## Design Decisions

The original code used the `useTempFiles` config flag to decide whether
to run fallback validation, but checking `tempFilePath` directly is more
accurate, files uploaded via the local API always have `file.data`
populated even when `useTempFiles` is enabled.

Simply removing the gate (as originally suggested) would've fixed the
extension check but left `validateSvg` broken, since it would still run
on an empty buffer and always return safe.

Fixes payloadcms#16233.

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Patrik Kozak <35232443+PatrikKozak@users.noreply.github.com>
Co-authored-by: Paul Popus <paul@payloadcms.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Security] MIME type validation bypass when useTempFiles is enabled

2 participants