@@ -235,6 +235,23 @@ def test_extract_year_lessthan_lookup(self):
235235 self .assertEqual (qs .count (), 1 )
236236 self .assertGreaterEqual (str (qs .query ).lower ().count ("extract" ), 2 )
237237
238+ def test_extract_lookup_name_sql_injection (self ):
239+ start_datetime = datetime (2015 , 6 , 15 , 14 , 30 , 50 , 321 )
240+ end_datetime = datetime (2016 , 6 , 15 , 14 , 10 , 50 , 123 )
241+ if settings .USE_TZ :
242+ start_datetime = timezone .make_aware (start_datetime )
243+ end_datetime = timezone .make_aware (end_datetime )
244+ self .create_model (start_datetime , end_datetime )
245+ self .create_model (end_datetime , start_datetime )
246+
247+ msg = "Invalid lookup_name: "
248+ with self .assertRaisesMessage (ValueError , msg ):
249+ DTModel .objects .filter (
250+ start_datetime__year = Extract (
251+ "start_datetime" , "day' FROM start_datetime)) OR 1=1;--"
252+ )
253+ ).exists ()
254+
238255 def test_extract_func (self ):
239256 start_datetime = datetime (2015 , 6 , 15 , 14 , 30 , 50 , 321 )
240257 end_datetime = datetime (2016 , 6 , 15 , 14 , 10 , 50 , 123 )
@@ -899,6 +916,23 @@ def test_extract_second_func(self):
899916 2 ,
900917 )
901918
919+ def test_trunc_lookup_name_sql_injection (self ):
920+ start_datetime = datetime (2015 , 6 , 15 , 14 , 30 , 50 , 321 )
921+ end_datetime = datetime (2016 , 6 , 15 , 14 , 10 , 50 , 123 )
922+ if settings .USE_TZ :
923+ start_datetime = timezone .make_aware (start_datetime )
924+ end_datetime = timezone .make_aware (end_datetime )
925+ self .create_model (start_datetime , end_datetime )
926+ self .create_model (end_datetime , start_datetime )
927+ msg = "Invalid kind: "
928+ with self .assertRaisesMessage (ValueError , msg ):
929+ DTModel .objects .filter (
930+ start_datetime__date = Trunc (
931+ "start_datetime" ,
932+ "year', start_datetime)) OR 1=1;--" ,
933+ )
934+ ).exists ()
935+
902936 def test_trunc_func (self ):
903937 start_datetime = datetime (2015 , 6 , 15 , 14 , 30 , 50 , 321 )
904938 end_datetime = datetime (2016 , 6 , 15 , 14 , 10 , 50 , 123 )
0 commit comments