Skip to content

Instantly share code, notes, and snippets.

rules:
- id: identical-is-comparison
pattern: $S is $S
message: "Found identical comparison using is"
languages: [python]
severity: ERROR
- id: none-comparison-ok
pattern: $S is None
message: "is None is OK"
languages: [python]
@minusworld
minusworld / wtf-python-return-finally.yml
Last active January 18, 2020 00:01
wtf-python-return-finally
rules:
- id: return-inside-finally
pattern: |
try:
$A
except $B:
$C
finally:
$X
return $Y
rules:
- id: django-number-fields
patterns:
- pattern-inside: |
class $M(...):
...
- pattern-either:
- pattern: $F = django.db.models.DecimalField(...)
- pattern: $F = django.db.models.FloatField(...)
message: "Found a fractional number field. Variable name: $F"
@minusworld
minusworld / use-decimalfield-for-money.yml
Created March 4, 2020 00:44
use-decimalfield-for-money.yml
rules:
- id: use-decimalfield-for-money
patterns:
- pattern-inside: |
class $M(...):
...
- pattern: $F = django.db.models.FloatField(...)
- pattern-where-python: "'price' in vars['$F'] or 'amount' in vars['$F'] or 'subtotal' in vars['$F'] or 'donation' in vars['$F'] or 'fee' in vars['$F'] or 'salaray' in vars['$F'] or 'precio' in vars['$F']"
message: "Found a FloatField used for variable $F. Use DecimalField for currency fields to avoid float-rounding errors."
languages: [python]
@minusworld
minusworld / django-validated-rules-20200304.yml
Created March 4, 2020 19:57
Django validated rules 20200304
rules:
- id: avoid-raw-sql
patterns:
- pattern-either:
- pattern: $MODEL.objects.raw($QUERY, ...)
- pattern: django.db.models.expressions.RawSQL(...)
message: "You should be very careful whenever you write raw SQL. Consider using Django ORM before raw SQL. See https://docs.djangoproject.com/en/3.0/topics/db/sql/#passing-parameters-into-raw"
languages: [python]
severity: ERROR
- id: no-null-string-field
@minusworld
minusworld / go-attribute-read-test.yml
Last active March 13, 2020 18:23
Test file for 'read from same attribute' Go check
rules:
- id: handler-assignment-from-multiple-sources
patterns:
- pattern-inside: |
func $HANDLER(..., $R *http.Request, ...) {
...
}
- pattern-not: |
$VAR = true
...
@minusworld
minusworld / password-empty-string.yml
Created March 13, 2020 23:19
Django empty password
rules:
- id: password-empty-string
patterns:
- pattern-either:
- pattern: |
$MODEL.set_password($EMPTY)
...
$MODEL.save()
- pattern: |
$VAR = $EMPTY
@minusworld
minusworld / go-antipatterns.yaml
Created March 17, 2020 19:57
Go antipatterns
rules:
- id: hidden-goroutine
patterns:
- pattern-not: |
func $FUNC(...) {
go func() {
...
}(...)
$MORE
}
rules:
- id: django-request-sink-attribute
patterns:
- pattern-inside: |
def $F(...):
...
- pattern-either:
- pattern: |
$V = request.$X
...