T09 · Insecure Skill Coding Practices
- Location
scripts/automation_dedup_guard.py:107- Finding
Default Destructive Deduplication Can Permanently Delete Legitimate Automations
- Content
View full analysis
1: # 按创建时间倒序,最新的保留 items_sorted = sorted(items, key=lambda x: x['created_at'], reverse=True) keep = items_sorted[0] dups = items_sorted[1:] duplicates[name] = { 'keep': keep, 'duplicates': dups, 'count': len(items) } return duplicates def cleanup_duplicates(conn, duplicates, dry_run=True): """删除重复任务(同时清理关联的运行记录)""" cursor = conn.cursor() results = [] total_runs_removed = 0 for name, info in duplicates.items(): for dup in info['duplicates']: did = dup['id'] if dry_run: results.append({ 'id': did, 'name': name, 'runs': '?', 'dry_run': True }) else: # 先删除关联的运行记录 cursor.execute("DELETE FROM automation_runs WHERE automation_id = ?", (did,)) runs_removed = cursor.rowcount total_runs_removed += runs_removed # 再删除任务本身 cursor.execute("DELETE FROM automations WHERE id = ?", (did,)) if cursor.rowcount > 0: results.append({ ...[truncated 3981 chars]- Remediation
View remediation
