{"type": "code_review", "input_code": "def login(username, password):\n query = \"SELECT * FROM users WHERE username='\" + username + \"' AND password='\" + password + \"'\"\n cursor.execute(query)\n return cursor.fetchone()", "analysis": "1. The code directly concatenates user input into a SQL query without any sanitization.\n2. This creates a classic SQL injection vulnerability where an attacker can manipulate the query.\n3. The password appears to be stored in plaintext or compared directly.\n4. No input validation is performed on username or password.\n5. The function returns raw database results without proper error handling.", "findings": [{"issue": "SQL Injection Vulnerability", "severity": "CRITICAL", "location": "query construction", "cwe": "CWE-89"}, {"issue": "Plaintext Password Storage", "severity": "HIGH", "location": "password comparison", "cwe": "CWE-256"}, {"issue": "Missing Input Validation", "severity": "MEDIUM", "location": "function parameters", "cwe": "CWE-20"}, {"issue": "No Error Handling", "severity": "MEDIUM", "location": "entire function", "cwe": "CWE-390"}], "fix": "def login(username, password):\n if not username or not password:\n raise ValueError(\"Username and password required\")\n \n if len(username) > 100 or len(password) > 100:\n raise ValueError(\"Input exceeds maximum length\")\n \n cursor.execute(\n \"SELECT user_id, username, password_hash FROM users WHERE username = %s\",\n (username,)\n )\n result = cursor.fetchone()\n \n if result and verify_password(password, result['password_hash']):\n return {'user_id': result['user_id'], 'username': result['username']}\n return None"} {"type": "debugging", "input_code": "async def fetch_user_data(user_ids):\n results = []\n for user_id in user_ids:\n data = await db.query(f\"SELECT * FROM users WHERE id = {user_id}\")\n results.append(data)\n return results", "analysis": "1. Sequential iteration over user IDs makes N database queries sequentially.\n2. String formatting in query creates SQL injection vulnerability.\n3. No error handling for database failures.\n4. Missing await on all operations.\n5. No connection pooling or timeout handling.", "findings": [{"issue": "SQL Injection", "severity": "CRITICAL", "location": "f-string query", "cwe": "CWE-89"}, {"issue": "Performance - N+1 Query Problem", "severity": "HIGH", "location": "sequential loop", "cwe": "CWE-1050"}, {"issue": "No Error Handling", "severity": "MEDIUM", "location": "database operations", "cwe": "CWE-390"}, {"issue": "Resource Exhaustion Risk", "severity": "MEDIUM", "location": "no limits on user_ids", "cwe": "CWE-400"}], "fix": "async def fetch_user_data(user_ids):\n if not user_ids:\n return []\n \n if len(user_ids) > 1000:\n raise ValueError(\"Too many user IDs requested\")\n \n try:\n query = \"SELECT * FROM users WHERE id = ANY($1)\"\n results = await db.query(query, list(user_ids))\n return results\n except DatabaseError as e:\n logger.error(f\"Failed to fetch user data: {e}\")\n raise"} {"type": "code_review", "input_code": "function renderTemplate(name, data) {\n return `