dgryski.semgrep-go.close-sql-query-rows.rows-not-closed

profile photo of dgryskidgryski
Author
581
Download Count*
License

QueryxContext rows must be closed (or use ExecContext)

Run Locally

Run in CI

Defintion

rules:
  - id: rows-not-closed
    patterns:
      - pattern: $Q.QueryxContext(...)
      - pattern-not-inside: return $X.QueryxContext(...)
      - pattern-not-inside: |
          $ROWS, $ERR = $Q.QueryxContext(...)
          ...
          $ROWS.Close()
      - pattern-not-inside: |
          $ROWS, $ERR = $Q.QueryxContext(...)
          ...
          defer $ROWS.Close()
      - pattern-not-inside: |
          $ROWS, $ERR = $Q.QueryxContext(...)
          ...
          $FUNC($ROWS)
      - pattern-not-inside: |
          if ... {
            ...
            $ROWS, $ERR = $Q.QueryxContext(...)
            ...
          } else { ... }
          $ROWS.Close()
      - pattern-not-inside: |
          if ... {
            ...
            $ROWS, $ERR = $Q.QueryxContext(...)
            ...
          } else { ... }
          ...
          defer $ROWS.Close()
      - pattern-not-inside: |
          if ... { ...  } else {
            ...
            $ROWS, $ERR = $Q.QueryxContext(...)
            ...
          }
          ...
          $ROWS.Close()
      - pattern-not-inside: |
          if ... { ...  } else {
            ...
            $ROWS, $ERR = $Q.QueryxContext(...)
            ...
          }
          ...
          defer $ROWS.Close()
    message: QueryxContext rows must be closed (or use ExecContext)
    languages:
      - go
    severity: ERROR
    metadata:
      license: MIT