diff --git a/apps/sim/lib/knowledge/documents/parser-extension.ts b/apps/sim/lib/knowledge/documents/parser-extension.ts index ab32a7da1ed..db8765f14a5 100644 --- a/apps/sim/lib/knowledge/documents/parser-extension.ts +++ b/apps/sim/lib/knowledge/documents/parser-extension.ts @@ -29,9 +29,8 @@ export function resolveParserExtension( mimeType?: string, fallback?: string ): string { - const filenameExtension = filename.includes('.') - ? filename.split('.').pop()?.toLowerCase() - : undefined + const raw = filename.includes('.') ? filename.split('.').pop()?.toLowerCase() : undefined + const filenameExtension = raw && /^[a-z0-9]+$/.test(raw) ? raw : undefined if (filenameExtension && isSupportedParserExtension(filenameExtension)) { return filenameExtension diff --git a/apps/sim/lib/uploads/utils/validation.ts b/apps/sim/lib/uploads/utils/validation.ts index f9bc0221801..94456e726ec 100644 --- a/apps/sim/lib/uploads/utils/validation.ts +++ b/apps/sim/lib/uploads/utils/validation.ts @@ -137,12 +137,13 @@ export interface FileValidationError { * Validate if a file type is supported for document processing */ export function validateFileType(fileName: string, mimeType: string): FileValidationError | null { - const extension = path.extname(fileName).toLowerCase().substring(1) as SupportedDocumentExtension + const raw = path.extname(fileName).toLowerCase().substring(1) + const extension = (/^[a-z0-9]+$/.test(raw) ? raw : '') as SupportedDocumentExtension if (!SUPPORTED_DOCUMENT_EXTENSIONS.includes(extension)) { return { code: 'UNSUPPORTED_FILE_TYPE', - message: `Unsupported file type: ${extension}. Supported types are: ${SUPPORTED_DOCUMENT_EXTENSIONS.join(', ')}`, + message: `Unsupported file type${extension ? `: ${extension}` : ` for "${fileName}"`}. Supported types are: ${SUPPORTED_DOCUMENT_EXTENSIONS.join(', ')}`, supportedTypes: [...SUPPORTED_DOCUMENT_EXTENSIONS], } } @@ -221,7 +222,8 @@ export function validateMediaFileType( fileName: string, mimeType: string ): FileValidationError | null { - const extension = path.extname(fileName).toLowerCase().substring(1) + const raw = path.extname(fileName).toLowerCase().substring(1) + const extension = /^[a-z0-9]+$/.test(raw) ? raw : '' const isAudio = SUPPORTED_AUDIO_EXTENSIONS.includes(extension as SupportedAudioExtension) const isVideo = SUPPORTED_VIDEO_EXTENSIONS.includes(extension as SupportedVideoExtension) @@ -229,7 +231,7 @@ export function validateMediaFileType( if (!isAudio && !isVideo) { return { code: 'UNSUPPORTED_FILE_TYPE', - message: `Unsupported media file type: ${extension}. Supported audio types: ${SUPPORTED_AUDIO_EXTENSIONS.join(', ')}. Supported video types: ${SUPPORTED_VIDEO_EXTENSIONS.join(', ')}`, + message: `Unsupported media file type${extension ? `: ${extension}` : ` for "${fileName}"`}. Supported audio types: ${SUPPORTED_AUDIO_EXTENSIONS.join(', ')}. Supported video types: ${SUPPORTED_VIDEO_EXTENSIONS.join(', ')}`, supportedTypes: [...SUPPORTED_AUDIO_EXTENSIONS, ...SUPPORTED_VIDEO_EXTENSIONS], } }