const SCRIPT_PATTERNS = [ / buffer.length) break; if (compressionMethod !== 0 && compressedSize > 0 && uncompressedSize / compressedSize > MAX_ZIP_COMPRESSION_RATIO) { return { scanStatus: 'blocked', riskLevel: 'critical', findings: ['zip_bomb_ratio'], }; } headers += 1; offset += headerSize; if (compressedSize > 0) { offset += compressedSize; } } return null; } export function runBasicFileScan(buffer, { filename, mimeType }) { if (!Buffer.isBuffer(buffer) || buffer.length === 0) { return { scanStatus: 'blocked', riskLevel: 'high', findings: ['empty_file'], }; } if (mimeType.startsWith('text/') || mimeType === 'application/pdf') { const textFinding = scanTextContent(buffer); if (textFinding) return textFinding; } if (mimeType === 'application/pdf' && buffer.subarray(0, 5).toString('ascii') !== '%PDF-') { return { scanStatus: 'blocked', riskLevel: 'medium', findings: ['pdf_signature_mismatch'], }; } if (isZipContainer(mimeType)) { const zipFinding = scanZipStructure(buffer); if (zipFinding) return zipFinding; } return { scanStatus: 'passed', riskLevel: 'none', findings: [], }; }