blob: 6da5b45705e3d5847e42f427f63ca4215cd14255 [file]
#!/usr/bin/env node
const fs = require('fs');
const file = process.argv[2] || 'cwec_v4.19.xml';
const xml = fs.readFileSync(file, 'utf8');
const hasMultipleUppercase = w => (w.match(/[A-Z]/g) || []).length > 1;
const toSentenceCase = s => s.split(' ').map((w, i) =>
w === w.toUpperCase() || hasMultipleUppercase(w) ? w : (i === 0 ? w.charAt(0).toUpperCase() + w.slice(1).toLowerCase() : w.toLowerCase())
).join(' ');
const results = [];
const weaknessRegex = /<Weakness\s+ID="(\d+)"\s+Name="([^"]+)"[^>]*>[\s\S]*?<\/Weakness>/g;
let match;
while ((match = weaknessRegex.exec(xml)) !== null) {
const [block, id, name] = match;
if (/<Usage>Allowed<\/Usage>/.test(block)) {
results.push(`CWE-${id} ${toSentenceCase(name)}`);
}
}
results.sort((a, b) => parseInt(a.match(/\d+/)[0]) - parseInt(b.match(/\d+/)[0]));
fs.writeFileSync('cwe.json', JSON.stringify({ examples: results }, null, 0.1));
console.log(`Generated cwe.json with ${results.length} entries`);