diff options
| author | Simon Charette <charette.s@gmail.com> | 2022-06-19 23:46:22 -0400 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-07-06 09:10:41 +0200 |
| commit | 585ed2f6d7e02b64747770add0e2d3749980d73c (patch) | |
| tree | a1ba7ee315f5160fc92dc4e311901ac20d4b0846 /tests | |
| parent | 14057603c747eed7ee0bb8fe1fb34b330caa6c58 (diff) | |
[4.1.x] Refs CVE-2022-34265 -- Properly escaped Extract() and Trunc() parameters.
Co-authored-by: Mariusz Felisiak <felisiak.mariusz@gmail.com>
Backport of 877c800f255ccaa7abde1fb944de45d1616f5cc9 from main
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/backends/base/test_operations.py | 16 | ||||
| -rw-r--r-- | tests/custom_lookups/tests.py | 2 | ||||
| -rw-r--r-- | tests/db_functions/datetime/test_extract_trunc.py | 14 |
3 files changed, 18 insertions, 14 deletions
diff --git a/tests/backends/base/test_operations.py b/tests/backends/base/test_operations.py index b19b7ee558..5260344da7 100644 --- a/tests/backends/base/test_operations.py +++ b/tests/backends/base/test_operations.py @@ -115,49 +115,49 @@ class SimpleDatabaseOperationTests(SimpleTestCase): with self.assertRaisesMessage( NotImplementedError, self.may_require_msg % "date_extract_sql" ): - self.ops.date_extract_sql(None, None) + self.ops.date_extract_sql(None, None, None) def test_time_extract_sql(self): with self.assertRaisesMessage( NotImplementedError, self.may_require_msg % "date_extract_sql" ): - self.ops.time_extract_sql(None, None) + self.ops.time_extract_sql(None, None, None) def test_date_trunc_sql(self): with self.assertRaisesMessage( NotImplementedError, self.may_require_msg % "date_trunc_sql" ): - self.ops.date_trunc_sql(None, None) + self.ops.date_trunc_sql(None, None, None) def test_time_trunc_sql(self): with self.assertRaisesMessage( NotImplementedError, self.may_require_msg % "time_trunc_sql" ): - self.ops.time_trunc_sql(None, None) + self.ops.time_trunc_sql(None, None, None) def test_datetime_trunc_sql(self): with self.assertRaisesMessage( NotImplementedError, self.may_require_msg % "datetime_trunc_sql" ): - self.ops.datetime_trunc_sql(None, None, None) + self.ops.datetime_trunc_sql(None, None, None, None) def test_datetime_cast_date_sql(self): with self.assertRaisesMessage( NotImplementedError, self.may_require_msg % "datetime_cast_date_sql" ): - self.ops.datetime_cast_date_sql(None, None) + self.ops.datetime_cast_date_sql(None, None, None) def test_datetime_cast_time_sql(self): with self.assertRaisesMessage( NotImplementedError, self.may_require_msg % "datetime_cast_time_sql" ): - self.ops.datetime_cast_time_sql(None, None) + self.ops.datetime_cast_time_sql(None, None, None) def test_datetime_extract_sql(self): with self.assertRaisesMessage( NotImplementedError, self.may_require_msg % "datetime_extract_sql" ): - self.ops.datetime_extract_sql(None, None, None) + self.ops.datetime_extract_sql(None, None, None, None) class DatabaseOperationTests(TestCase): diff --git a/tests/custom_lookups/tests.py b/tests/custom_lookups/tests.py index ece67a46a5..b730d7b5e1 100644 --- a/tests/custom_lookups/tests.py +++ b/tests/custom_lookups/tests.py @@ -75,7 +75,7 @@ class YearTransform(models.Transform): def as_sql(self, compiler, connection): lhs_sql, params = compiler.compile(self.lhs) - return connection.ops.date_extract_sql("year", lhs_sql), params + return connection.ops.date_extract_sql("year", lhs_sql, params) @property def output_field(self): diff --git a/tests/db_functions/datetime/test_extract_trunc.py b/tests/db_functions/datetime/test_extract_trunc.py index bb70ed6094..00e3897e68 100644 --- a/tests/db_functions/datetime/test_extract_trunc.py +++ b/tests/db_functions/datetime/test_extract_trunc.py @@ -13,6 +13,7 @@ except ImportError: pytz = None from django.conf import settings +from django.db import DataError, OperationalError from django.db.models import ( DateField, DateTimeField, @@ -244,8 +245,7 @@ class DateFunctionTests(TestCase): self.create_model(start_datetime, end_datetime) self.create_model(end_datetime, start_datetime) - msg = "Invalid lookup_name: " - with self.assertRaisesMessage(ValueError, msg): + with self.assertRaises((DataError, OperationalError, ValueError)): DTModel.objects.filter( start_datetime__year=Extract( "start_datetime", "day' FROM start_datetime)) OR 1=1;--" @@ -940,14 +940,18 @@ class DateFunctionTests(TestCase): end_datetime = timezone.make_aware(end_datetime) self.create_model(start_datetime, end_datetime) self.create_model(end_datetime, start_datetime) - msg = "Invalid kind: " - with self.assertRaisesMessage(ValueError, msg): - DTModel.objects.filter( + # Database backends raise an exception or don't return any results. + try: + exists = DTModel.objects.filter( start_datetime__date=Trunc( "start_datetime", "year', start_datetime)) OR 1=1;--", ) ).exists() + except (DataError, OperationalError): + pass + else: + self.assertIs(exists, False) def test_trunc_func(self): start_datetime = datetime(999, 6, 15, 14, 30, 50, 321) |
