Skip to content

fix: enforce mimeTypes restriction when useTempFiles is enabled#16255

Merged
PatrikKozak merged 8 commits intopayloadcms:mainfrom
eddieran:fix/mime-validation-tempfiles
Apr 14, 2026
Merged

fix: enforce mimeTypes restriction when useTempFiles is enabled#16255
PatrikKozak merged 8 commits intopayloadcms:mainfrom
eddieran:fix/mime-validation-tempfiles

Conversation

@eddieran
Copy link
Copy Markdown
Contributor

@eddieran eddieran commented Apr 12, 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.

eddieran and others added 4 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 payloadcms#16233

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@PatrikKozak PatrikKozak self-assigned this Apr 13, 2026
@PatrikKozak PatrikKozak self-requested a review April 13, 2026 13:25
@PatrikKozak PatrikKozak force-pushed the fix/mime-validation-tempfiles branch from c7974af to 42f08a3 Compare April 13, 2026 13:39
@eddieran
Copy link
Copy Markdown
Contributor Author

Hey @PatrikKozak — just a heads up, the first commit (a2b31a2) has a Co-Authored-By: Claude trailer from my original submission. Could you drop that when squash-merging? I'd prefer to keep the attribution clean. Thanks!

@PatrikKozak PatrikKozak merged commit bb749a5 into payloadcms:main Apr 14, 2026
329 of 332 checks passed
@github-actions
Copy link
Copy Markdown
Contributor

🚀 This is included in version v3.83.0

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

3 participants