[
  {
    "id": "INT001",
    "pattern": "\\bas\\s+(?:u8|u16|u32|i8|i16|i32|i64|usize)\\b",
    "flags": "",
    "category": "integer_overflow",
    "description": "Cast truncation: `val as u8/u16/u32/i32/usize` silently drops bits",
    "language": [
      "rust"
    ],
    "severity": "medium"
  },
  {
    "id": "INT002",
    "pattern": "\\w+\\s*\\*\\s*\\w*(?:size|len)\\w*\\b",
    "flags": "i",
    "category": "integer_overflow",
    "description": "Allocation size computed from untrusted multiplication (user_size * element_size)",
    "language": [
      "rust"
    ],
    "severity": "medium"
  },
  {
    "id": "INT003",
    "pattern": "\\[\\s*(?:index|idx|start\\.\\.end)\\s*\\]|\\[\\s*row\\s*\\]\\s*\\[\\s*col\\s*\\]|\\[\\s*n\\s*\\]",
    "flags": "",
    "category": "integer_overflow",
    "description": "Array/slice indexing with named variable index / range (no bounds check)",
    "language": [
      "rust"
    ],
    "severity": "medium"
  }
]
