-
Notifications
You must be signed in to change notification settings - Fork 13k
fix: FileUploadModal not validating renamed blacklisted file types
#38106
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: FileUploadModal not validating renamed blacklisted file types
#38106
Conversation
|
Looks like this PR is ready to merge! 🎉 |
🦋 Changeset detectedLatest commit: aadaadb The changes in this PR will be included in the next version bump. This PR includes changesets to release 40 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
Note Other AI code review bot(s) detectedCodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review. WalkthroughAdded filename-based MIME lookup and used it to validate renamed uploads before submission; small upload flow cleanup and tests/changeset to prevent blacklisted types being bypassed by renaming. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant User as "User\n(uploads file)"
participant UI as "FileUploadModal\n(client)"
participant Util as "mimeTypes Util"
participant Validator as "ContentType Validator"
participant Server as "Server\n(upload endpoint)"
User->>UI: Select file and optionally rename
UI->>Util: getMimeTypeFromFileName(newFileName)
Util-->>UI: inferred MIME type
UI->>Validator: fileUploadIsValidContentType(inferred MIME or file.type)
Validator-->>UI: accepted / rejected
alt rejected
UI-->>User: show name error (role=alert) and abort
else accepted
UI->>UI: run other validations (size, description)
UI->>Server: upload file (original or renamed)
Server-->>UI: upload response
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
1 issue found across 4 files
Prompt for AI agents (all issues)
Check if these issues are valid — if so, understand the root cause of each and fix them.
<file name="apps/meteor/tests/e2e/file-upload.spec.ts">
<violation number="1" location="apps/meteor/tests/e2e/file-upload.spec.ts:14">
P1: Typo: trailing comma inside the setting ID string `'FileUpload_MediaTypeBlackList,'` will cause the setting to not be found. The `afterAll` block correctly uses `'FileUpload_MediaTypeBlackList'` without the comma.</violation>
</file>
Since this is your first cubic review, here's how it works:
- cubic automatically reviews your code and comments on bugs and improvements
- Teach cubic by replying to its comments. cubic learns from your replies and gets better over time
- Ask questions if you need clarification on any suggestion
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🤖 Fix all issues with AI agents
In @apps/meteor/tests/e2e/file-upload.spec.ts:
- Line 14: The call to setSettingValueById uses an incorrect setting ID with a
trailing comma ('FileUpload_MediaTypeBlackList,'), causing the blacklist to be
set on the wrong key; remove the trailing comma so the function uses the correct
ID ('FileUpload_MediaTypeBlackList') in the test (locate the failing invocation
of setSettingValueById in file-upload.spec.ts and update the string argument).
🧹 Nitpick comments (1)
apps/meteor/client/lib/chats/flows/uploadFiles.ts (1)
217-217: Consider validating with prepared file for consistency.The
invalidContentTypecheck usesnextFile?.type(the original file's type), but the actual submission validation at line 87 uses the prepared file's type. This could lead to inconsistent UX where the modal appears but then immediately shows an error on submit when a user renames a file to a blacklisted extension.However, this might be intentional to allow users to fix the filename. If so, the current behavior is acceptable.
💡 Alternative approach for consistency
If you want to prevent the modal from appearing at all for invalid types after renaming, you could move the file preparation and validation earlier:
const uploadNextFile = (): void => { const nextFile = queue.pop(); if (!nextFile) { chat.composer?.dismissAllQuotedMessages(); return; } + + // Early validation for renamed files + const initialFile = prepareFile(nextFile.name, nextFile.name, nextFile); imperativeModal.open({ component: FileUploadModal, props: { - invalidContentType: !fileUploadIsValidContentType(nextFile?.type), + invalidContentType: !fileUploadIsValidContentType(initialFile.type),Note: This would require adjusting the logic since initially the filename hasn't changed yet.
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Jira integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (4)
apps/meteor/app/utils/lib/mimeTypes.tsapps/meteor/client/lib/chats/flows/uploadFiles.tsapps/meteor/client/views/room/modals/FileUploadModal/FileUploadModal.tsxapps/meteor/tests/e2e/file-upload.spec.ts
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{ts,tsx,js}
📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)
**/*.{ts,tsx,js}: Write concise, technical TypeScript/JavaScript with accurate typing in Playwright tests
Avoid code comments in the implementation
Files:
apps/meteor/client/views/room/modals/FileUploadModal/FileUploadModal.tsxapps/meteor/tests/e2e/file-upload.spec.tsapps/meteor/client/lib/chats/flows/uploadFiles.tsapps/meteor/app/utils/lib/mimeTypes.ts
**/*.spec.ts
📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)
**/*.spec.ts: Use descriptive test names that clearly communicate expected behavior in Playwright tests
Use.spec.tsextension for test files (e.g.,login.spec.ts)
Files:
apps/meteor/tests/e2e/file-upload.spec.ts
apps/meteor/tests/e2e/**/*.spec.ts
📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)
apps/meteor/tests/e2e/**/*.spec.ts: All test files must be created inapps/meteor/tests/e2e/directory
Avoid usingpage.locator()in Playwright tests - always prefer semantic locators such aspage.getByRole(),page.getByLabel(),page.getByText(), orpage.getByTitle()
Usetest.beforeAll()andtest.afterAll()for setup/teardown in Playwright tests
Usetest.step()for complex test scenarios to improve organization in Playwright tests
Group related tests in the same file
Utilize Playwright fixtures (test,page,expect) for consistency in test files
Prefer web-first assertions (toBeVisible,toHaveText, etc.) in Playwright tests
Useexpectmatchers for assertions (toEqual,toContain,toBeTruthy,toHaveLength, etc.) instead ofassertstatements in Playwright tests
Usepage.waitFor()with specific conditions instead of hardcoded timeouts in Playwright tests
Implement proper wait strategies for dynamic content in Playwright tests
Maintain test isolation between test cases in Playwright tests
Ensure clean state for each test execution in Playwright tests
Ensure tests run reliably in parallel without shared state conflicts
Files:
apps/meteor/tests/e2e/file-upload.spec.ts
apps/meteor/tests/e2e/**/*.{ts,spec.ts}
📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)
apps/meteor/tests/e2e/**/*.{ts,spec.ts}: Store commonly used locators in variables/constants for reuse
Follow Page Object Model pattern consistently in Playwright tests
Files:
apps/meteor/tests/e2e/file-upload.spec.ts
🧠 Learnings (10)
📚 Learning: 2025-11-24T17:08:17.065Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : All test files must be created in `apps/meteor/tests/e2e/` directory
Applied to files:
apps/meteor/tests/e2e/file-upload.spec.ts
📚 Learning: 2025-11-24T17:08:17.065Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Group related tests in the same file
Applied to files:
apps/meteor/tests/e2e/file-upload.spec.ts
📚 Learning: 2025-11-24T17:08:17.065Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Utilize Playwright fixtures (`test`, `page`, `expect`) for consistency in test files
Applied to files:
apps/meteor/tests/e2e/file-upload.spec.ts
📚 Learning: 2025-11-24T17:08:17.065Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Use `expect` matchers for assertions (`toEqual`, `toContain`, `toBeTruthy`, `toHaveLength`, etc.) instead of `assert` statements in Playwright tests
Applied to files:
apps/meteor/tests/e2e/file-upload.spec.ts
📚 Learning: 2025-11-24T17:08:17.065Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Ensure tests run reliably in parallel without shared state conflicts
Applied to files:
apps/meteor/tests/e2e/file-upload.spec.ts
📚 Learning: 2025-11-24T17:08:17.065Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Maintain test isolation between test cases in Playwright tests
Applied to files:
apps/meteor/tests/e2e/file-upload.spec.ts
📚 Learning: 2025-11-24T17:08:17.065Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Use `test.beforeAll()` and `test.afterAll()` for setup/teardown in Playwright tests
Applied to files:
apps/meteor/tests/e2e/file-upload.spec.ts
📚 Learning: 2025-11-24T17:08:17.065Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to **/*.spec.ts : Use descriptive test names that clearly communicate expected behavior in Playwright tests
Applied to files:
apps/meteor/tests/e2e/file-upload.spec.ts
📚 Learning: 2025-11-24T17:08:17.065Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to **/*.spec.ts : Use `.spec.ts` extension for test files (e.g., `login.spec.ts`)
Applied to files:
apps/meteor/tests/e2e/file-upload.spec.ts
📚 Learning: 2025-11-24T17:08:17.065Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-11-24T17:08:17.065Z
Learning: Applies to apps/meteor/tests/e2e/**/*.{ts,spec.ts} : Follow Page Object Model pattern consistently in Playwright tests
Applied to files:
apps/meteor/tests/e2e/file-upload.spec.ts
🧬 Code graph analysis (1)
apps/meteor/client/lib/chats/flows/uploadFiles.ts (3)
apps/meteor/app/utils/lib/mimeTypes.ts (1)
getMimeTypeFromFileName(31-31)packages/ui-client/src/helpers/imperativeModal.tsx (1)
imperativeModal(53-53)packages/core-typings/src/IRoom.ts (1)
isRoomFederated(122-122)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: 📦 Build Packages
- GitHub Check: cubic · AI code reviewer
- GitHub Check: CodeQL-Build
- GitHub Check: CodeQL-Build
🔇 Additional comments (5)
apps/meteor/tests/e2e/file-upload.spec.ts (1)
54-64: Well-designed test for the security fix.The test correctly validates that renaming a file to a blacklisted extension triggers MIME type validation and prevents upload. It verifies both that the description doesn't appear in the message and that the appropriate error toast is displayed.
apps/meteor/app/utils/lib/mimeTypes.ts (1)
15-18: Clean extraction of MIME type resolution logic.The new
getMimeTypeFromFileNamehelper properly encapsulates filename-to-MIME-type lookup with a sensible default fallback. This makes the logic reusable across the codebase.apps/meteor/client/lib/chats/flows/uploadFiles.ts (2)
37-44: File preparation logic correctly reconstructs MIME type.The
prepareFilefunction properly creates a new File instance with the corrected MIME type when the filename extension changes. This is the core of the security fix, ensuring the MIME type reflects the actual filename rather than the original file.
84-95: MIME validation correctly prevents blacklist bypass.The validation logic properly checks the prepared file's MIME type after filename changes and displays an error toast before proceeding to the next file. This prevents users from bypassing the blacklist by renaming files.
apps/meteor/client/views/room/modals/FileUploadModal/FileUploadModal.tsx (1)
29-29: API extension maintains flexibility for toast handling.The optional
dispatchToastMessageparameter allows the upload flow to display validation errors while maintaining backward compatibility. This is a clean approach to enable the security fix without breaking existing callers.
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## develop #38106 +/- ##
===========================================
+ Coverage 70.66% 70.73% +0.07%
===========================================
Files 3136 3139 +3
Lines 108599 108744 +145
Branches 19538 19594 +56
===========================================
+ Hits 76742 76921 +179
+ Misses 29856 29824 -32
+ Partials 2001 1999 -2
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
apps/meteor/client/lib/chats/flows/uploadFiles.ts (1)
218-218: Minor: Initial validation state may not reflect filename changes in modal.The
invalidContentTypeprop is based onnextFile.type(the original file type) and doesn't update if the user changes the filename within the modal. This could show stale warnings, though the actual security validation at line 88 inonSubmitis correct and will catch invalid types.Consider: For improved UX, the modal could reactively update warnings as the filename changes, but this would require modal component changes beyond this PR's scope.
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Jira integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
apps/meteor/client/lib/chats/flows/uploadFiles.ts
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,js}
📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)
**/*.{ts,tsx,js}: Write concise, technical TypeScript/JavaScript with accurate typing in Playwright tests
Avoid code comments in the implementation
Files:
apps/meteor/client/lib/chats/flows/uploadFiles.ts
🧠 Learnings (1)
📚 Learning: 2025-11-19T12:32:29.696Z
Learnt from: d-gubert
Repo: RocketChat/Rocket.Chat PR: 37547
File: packages/i18n/src/locales/en.i18n.json:634-634
Timestamp: 2025-11-19T12:32:29.696Z
Learning: Repo: RocketChat/Rocket.Chat
Context: i18n workflow
Learning: In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English. Do not request adding the same key to all locale files in future reviews.
Applied to files:
apps/meteor/client/lib/chats/flows/uploadFiles.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: 📦 Build Packages
- GitHub Check: CodeQL-Build
- GitHub Check: CodeQL-Build
🔇 Additional comments (4)
apps/meteor/client/lib/chats/flows/uploadFiles.ts (4)
4-4: LGTM! Necessary imports for MIME validation and user feedback.The imports support the security fix by enabling MIME type recalculation (
getMimeTypeFromFileName), validation error display (dispatchToastMessage), and internationalized messages (getI18n).Also applies to: 7-7, 12-12
68-69: LGTM! Improved naming clarity.Renaming
filetonextFileimproves readability by distinguishing the original queued file from the prepared file created inonSubmit.Also applies to: 77-78
85-96: Excellent security enforcement of MIME type validation.This is the critical fix that prevents the bypass:
- File is prepared with MIME type recalculated based on the final filename
- Validation checks the prepared file's MIME type
- Invalid files are rejected with a clear, internationalized error message
- Upload is prevented and flow continues to next file
The validation correctly happens after MIME type recalculation, ensuring server-side blacklist checks cannot be bypassed by filename manipulation.
38-45: [Your rewritten review comment text here]
[Exactly ONE classification tag]
dougfabris
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey @abhinavkrin
I've tested it out and I'm feeling its a bit annoying allowing the user to change the file extension and then not allowing him to send the file. IMO the best approach would be allowing changing the file name and we store the real file with the real extension but with the new name as the user wanted. What do you think?
7ea5f03 to
5e4863a
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🤖 Fix all issues with AI agents
In `@apps/meteor/client/views/room/modals/FileUploadModal/FileUploadModal.tsx`:
- Line 122: Remove the debug console.log call that prints errors in the
FileUploadModal component: delete the console.log(errors); statement in
FileUploadModal.tsx (the one inside the FileUploadModal component or its
render/effect) so the browser console is not polluted; if you need retained
error visibility, replace it with a proper user-facing error handler or a
debug-only logger gated by an env flag instead.
- Around line 75-78: The current check uses touchedFields.name which can be
false if the user edits the filename but doesn't blur, allowing bypass; update
the validation in the FileUploadModal to always validate the renamed
filename/type (use renamedFile.type) or at minimum validate whenever the
extension/value differs from the original (compare renamedFile.name or
renamedFile.type to the original file's values) instead of relying on
touchedFields.name; call fileUploadIsValidContentType(renamedFile.type) and, on
failure, call setError('name', { message:
t('FileUpload_MediaType_NotAccepted__type__', { type: renamedFile.type }) }) (or
use the existing invalidContentType flag) so the check runs deterministically
before submit.
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Jira integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (2)
apps/meteor/client/lib/chats/flows/uploadFiles.tsapps/meteor/client/views/room/modals/FileUploadModal/FileUploadModal.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
- apps/meteor/client/lib/chats/flows/uploadFiles.ts
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,js}
📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)
**/*.{ts,tsx,js}: Write concise, technical TypeScript/JavaScript with accurate typing in Playwright tests
Avoid code comments in the implementation
Files:
apps/meteor/client/views/room/modals/FileUploadModal/FileUploadModal.tsx
🧬 Code graph analysis (1)
apps/meteor/client/views/room/modals/FileUploadModal/FileUploadModal.tsx (1)
apps/meteor/app/utils/lib/mimeTypes.ts (1)
getMimeTypeFromFileName(31-31)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: 📦 Build Packages
- GitHub Check: cubic · AI code reviewer
- GitHub Check: CodeQL-Build
- GitHub Check: CodeQL-Build
🔇 Additional comments (3)
apps/meteor/client/views/room/modals/FileUploadModal/FileUploadModal.tsx (3)
26-28: LGTM!Imports are correctly sourced for the new MIME type validation and file renaming functionality.
39-47: LGTM!The
prepareRenamedFilehelper correctly handles file renaming: it preserves the original file when extensions match, and constructs a new File with the correct MIME type derived from the renamed extension when they differ.
60-62: LGTM!Form state setup is appropriate.
setErrorenables programmatic validation errors,isSubmittingcorrectly drives the button loading state, and default values are properly initialized from the file and description props.
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
apps/meteor/client/views/room/modals/FileUploadModal/FileUploadModal.tsx
Outdated
Show resolved
Hide resolved
apps/meteor/client/views/room/modals/FileUploadModal/FileUploadModal.tsx
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
1 issue found across 3 files (changes from recent commits).
Prompt for AI agents (all issues)
Check if these issues are valid — if so, understand the root cause of each and fix them.
<file name="apps/meteor/client/views/room/modals/FileUploadModal/FileUploadModal.tsx">
<violation number="1" location="apps/meteor/client/views/room/modals/FileUploadModal/FileUploadModal.tsx:75">
P2: MIME-type validation is skipped when the user renames a file and submits without blurring the field, because the guard relies on `touchedFields.name`. Compare the submitted name to the original instead of the touched state so the validation always runs when the filename changes.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
apps/meteor/client/views/room/modals/FileUploadModal/FileUploadModal.tsx
Outdated
Show resolved
Hide resolved
3b4cc9b to
635f316
Compare
Signed-off-by: Abhinav Kumar <abhinav@avitechlab.com>
Signed-off-by: Abhinav Kumar <abhinav@avitechlab.com>
5d5ab41 to
8e19e1c
Compare
8e19e1c to
a924227
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
1 issue found across 22 files (changes from recent commits).
Prompt for AI agents (all issues)
Check if these issues are valid — if so, understand the root cause of each and fix them.
<file name="packages/media-signaling/src/lib/Call.ts">
<violation number="1">
P2: `sentLocalSdp`/`receivedRemoteSdp` are never reset for new negotiations, so subsequent renegotiations can skip the expected client states and timeouts. Reset these flags when a new negotiation starts (e.g., when adding a negotiation or when `currentNegotiationId` changes).</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
FileUploadModal not validating when renaming blacklisted file types
FileUploadModal not validating when renaming blacklisted file typesFileUploadModal not validating renamed blacklisted file types
Proposed changes (including videos or screenshots)
This PR fixes an issue where the client continued sending an incorrect MIME type when a file name was changed during the upload flow.
Issue(s)
Steps to test or reproduce
Further comments
SUP-953
Summary by CodeRabbit
New Features
Bug Fixes
Improvements
Tests
Chores
✏️ Tip: You can customize this high-level summary in your review settings.