Skip to content

Commit a780e09

Browse files
committed
fix(files): detect extensions without a length cap
1 parent ff3913c commit a780e09

2 files changed

Lines changed: 4 additions & 3 deletions

File tree

‎apps/sim/lib/uploads/utils/file-utils.test.ts‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,8 @@ describe('ensureFileNameExtension', () => {
329329
'download (641).jpg'
330330
)
331331
expect(ensureFileNameExtension('hero.png', 'image/jpeg')).toBe('hero.png')
332+
expect(ensureFileNameExtension('site.webmanifest', 'application/json')).toBe('site.webmanifest')
333+
expect(ensureFileNameExtension('Sim.ai <> RVTech', 'text/html')).toBe('Sim.ai <> RVTech.html')
332334
expect(ensureFileNameExtension('blob', 'application/octet-stream')).toBe('blob')
333335
expect(ensureFileNameExtension('blob', null)).toBe('blob')
334336
})

‎apps/sim/lib/uploads/utils/file-utils.ts‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { omit } from '@sim/utils/object'
33
import type { StorageContext } from '@/lib/uploads'
44
import {
55
ACCEPTED_FILE_TYPES,
6+
isAlphanumericExtension,
67
SUPPORTED_ARCHIVE_EXTENSIONS,
78
SUPPORTED_DOCUMENT_EXTENSIONS,
89
} from '@/lib/uploads/utils/validation'
@@ -617,8 +618,6 @@ export function getExtensionFromMimeType(mimeType: string): string | null {
617618
return MIME_TO_EXTENSION[mimeType.split(';')[0].trim().toLowerCase()] || null
618619
}
619620

620-
const FILE_NAME_EXTENSION_RE = /\.[A-Za-z0-9]{1,8}$/
621-
622621
/**
623622
* Appends the extension the content type implies when a file name carries none, so a
624623
* saved copy opens in the right application.
@@ -627,7 +626,7 @@ export function ensureFileNameExtension(
627626
fileName: string,
628627
contentType: string | null | undefined
629628
): string {
630-
if (!contentType || FILE_NAME_EXTENSION_RE.test(fileName)) return fileName
629+
if (!contentType || isAlphanumericExtension(getFileExtension(fileName))) return fileName
631630
const extension = getExtensionFromMimeType(contentType)
632631
return extension ? `${fileName}.${extension}` : fileName
633632
}

0 commit comments

Comments
 (0)