






















@@ -107,11 +107,40 @@ function isGenericContainerMime(mime?: string): boolean {
107107return mime === "application/zip" || mime === "application/octet-stream";
108108}
109109110-function shouldIgnoreProvidedImageMime(params: {
110+function shouldIgnoreImageMimeHint(params: { sniffedMime?: string; hintedMime?: string }): boolean {
111+return isGenericContainerMime(params.sniffedMime) && isImageMime(params.hintedMime);
112+}
113+114+function isSpecificMime(mime?: string): boolean {
115+return Boolean(mime && !isGenericContainerMime(mime));
116+}
117+118+function resolveAttachmentMime(params: {
111119sniffedMime?: string;
112120providedMime?: string;
113-}): boolean {
114-return isGenericContainerMime(params.sniffedMime) && isImageMime(params.providedMime);
121+labelMime?: string;
122+}): string {
123+const trustedProvidedMime = shouldIgnoreImageMimeHint({
124+sniffedMime: params.sniffedMime,
125+hintedMime: params.providedMime,
126+})
127+ ? undefined
128+ : params.providedMime;
129+const trustedLabelMime = shouldIgnoreImageMimeHint({
130+sniffedMime: params.sniffedMime,
131+hintedMime: params.labelMime,
132+})
133+ ? undefined
134+ : params.labelMime;
135+return (
136+(isSpecificMime(params.sniffedMime) && params.sniffedMime) ||
137+(isSpecificMime(trustedProvidedMime) && trustedProvidedMime) ||
138+(isSpecificMime(trustedLabelMime) && trustedLabelMime) ||
139+params.sniffedMime ||
140+trustedProvidedMime ||
141+trustedLabelMime ||
142+"application/octet-stream"
143+);
115144}
116145117146function isValidBase64(value: string): boolean {
@@ -264,24 +293,12 @@ export async function parseMessageWithAttachments(
264293const providedMime = normalizeMime(mime);
265294const sniffedMime = normalizeMime(await sniffMimeFromBase64(b64));
266295const labelMime = normalizeMime(mimeTypeFromFilePath(label));
267-const trustedProvidedMime = shouldIgnoreProvidedImageMime({ sniffedMime, providedMime })
268- ? undefined
269- : providedMime;
270296271297// Prefer specific MIME signals over generic container types. OOXML
272298// documents (docx/xlsx/pptx) sniff as application/zip; without this
273299// priority the agent would receive a `.zip` instead of the specific
274300// Office document the caller declared.
275-const finalMime =
276-(sniffedMime && !isGenericContainerMime(sniffedMime) && sniffedMime) ||
277-(trustedProvidedMime &&
278-!isGenericContainerMime(trustedProvidedMime) &&
279-trustedProvidedMime) ||
280-(labelMime && !isGenericContainerMime(labelMime) && labelMime) ||
281-sniffedMime ||
282-trustedProvidedMime ||
283-labelMime ||
284-"application/octet-stream";
301+const finalMime = resolveAttachmentMime({ sniffedMime, providedMime, labelMime });
285302286303if (
287304sniffedMime &&
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。