python.lang.best-practice.open-never-closed.open-never-closed
semgrep
Author
6,393
Download Count*
License
file object opened without corresponding close
Run Locally
Run in CI
Defintion
rules:
- id: open-never-closed
patterns:
- pattern-not-inside: |
$F = open(...)
...
$F.close()
- pattern-not-inside: |
$F = io.open(...)
...
$F.close()
- pattern-not-inside: |
$F = tarfile.open(...)
...
$F.close()
- pattern-not-inside: |
$F = ZipFile.open(...)
...
$F.close()
- pattern-not-inside: |
$F = tempfile.TemporaryFile(...)
...
$F.close()
- pattern-not-inside: |
$F = tempfile.NamedTemporaryFile(...)
...
$F.close()
- pattern-not-inside: |
$F = tempfile.SpooledTemporaryFile(...)
...
$F.close()
- pattern-not-inside: |
$F = open(...)
...
try:
...
finally:
$F.close()
- pattern-not-inside: |
$F = io.open(...)
...
try:
...
finally:
$F.close()
- pattern-not-inside: |
$F = tarfile.open(...)
...
try:
...
finally:
$F.close()
- pattern-not-inside: |
$F = ZipFile.open(...)
...
try:
...
finally:
$F.close()
- pattern-not-inside: |
$F = tempfile.TemporaryFile(...)
...
try:
...
finally:
$F.close()
- pattern-not-inside: |
$F = tempfile.NamedTemporaryFile(...)
...
try:
...
finally:
$F.close()
- pattern-not-inside: |
$F = tempfile.SpooledTemporaryFile(...)
...
try:
...
finally:
$F.close()
- pattern-either:
- pattern: $F = open(...)
- pattern: $F = io.open(...)
- pattern: $F = tarfile.open(...)
- pattern: $F = ZipFile.open(...)
- pattern: $F = tempfile.TemporaryFile(...)
- pattern: $F = tempfile.NamedTemporaryFile(...)
- pattern: $F = tempfile.SpooledTemporaryFile(...)
message: file object opened without corresponding close
languages:
- python
severity: ERROR
metadata:
category: best-practice
technology:
- python
license: Commons Clause License Condition v1.0[LGPL-2.1-only]
Examples
open-never-closed.py
def func1():
# ruleid:open-never-closed
fd = open('foo')
x = 123
def func2():
# ok:open-never-closed
fd = open('bar')
fd.close()
def func3():
# ok:open-never-closed
fd = open('baz')
try:
pass
finally:
fd.close()
Short Link: https://sg.run/9oN8