Skip to content

Commit 729cf79

Browse files
authored
Merge pull request github#9351 from RasmusWL/django-file-read
Python: Support `read` on Django file
2 parents 9abd225 + 5924e88 commit 729cf79

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

python/ql/lib/semmle/python/frameworks/Django.qll

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,15 @@ module Django {
464464

465465
/** A file-like object instance that originates from a `UploadedFile`. */
466466
class UploadedFileFileLikeInstances extends Stdlib::FileLikeObject::InstanceSource {
467-
UploadedFileFileLikeInstances() { this.(DataFlow::AttrRead).accesses(instance(), "file") }
467+
UploadedFileFileLikeInstances() {
468+
// in the bottom of
469+
// https://docs.djangoproject.com/en/4.0/ref/files/file/#django.core.files.File
470+
// it's mentioned that the File object itself has proxy methods for
471+
// `read`/`write`/... that forwards to the underlying file object.
472+
this = instance()
473+
or
474+
this.(DataFlow::AttrRead).accesses(instance(), "file")
475+
}
468476
}
469477
}
470478

python/ql/test/library-tests/frameworks/django-v2-v3/taint_test.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ def test_taint(request: HttpRequest, foo, bar, baz=None): # $requestHandler rou
7171
request.FILES["key"].name, # $ tainted
7272
request.FILES["key"].file, # $ tainted
7373
request.FILES["key"].file.read(), # $ tainted
74+
request.FILES["key"].read(), # $ tainted
7475

7576
request.FILES.get("key"), # $ tainted
7677
request.FILES.get("key").name, # $ tainted

0 commit comments

Comments
 (0)