@@ -494,6 +494,17 @@ def test_specifiers(self, version, spec, expected):
494494 assert Version (version ) not in spec
495495 assert not spec .contains (Version (version ))
496496
497+ @pytest .mark .parametrize (
498+ ("spec" , "version" ),
499+ [
500+ ("==1.0" , "not a valid version" ),
501+ ("===invalid" , "invalid" ),
502+ ],
503+ )
504+ def test_invalid_spec (self , spec , version ):
505+ spec = Specifier (spec , prereleases = True )
506+ assert not spec .contains (version )
507+
497508 @pytest .mark .parametrize (
498509 (
499510 "specifier" ,
@@ -645,6 +656,9 @@ def test_specifiers_prereleases(
645656 (">=1.0" , False , True , ["1.0" , "2.0a1" ], ["1.0" , "2.0a1" ]),
646657 (">=1.0" , True , True , ["1.0" , "2.0a1" ], ["1.0" , "2.0a1" ]),
647658 (">=1.0" , False , False , ["1.0" , "2.0a1" ], ["1.0" ]),
659+ # Test that invalid versions are discarded
660+ (">=1.0" , None , None , ["not a valid version" ], []),
661+ (">=1.0" , None , None , ["1.0" , "not a valid version" ], ["1.0" ]),
648662 ],
649663 )
650664 def test_specifier_filter (
@@ -960,6 +974,13 @@ def test_specifier_contains_installed_prereleases(
960974 (">=1.0,<=2.0" , False , True , ["1.0" , "1.5a1" ], ["1.0" , "1.5a1" ]),
961975 (">=1.0,<=2.0dev" , True , False , ["1.0" , "1.5a1" ], ["1.0" ]),
962976 (">=1.0,<=2.0dev" , False , True , ["1.0" , "1.5a1" ], ["1.0" , "1.5a1" ]),
977+ # Test that invalid versions are discarded
978+ ("" , None , None , ["invalid version" ], []),
979+ ("" , None , False , ["invalid version" ], []),
980+ ("" , False , None , ["invalid version" ], []),
981+ ("" , None , None , ["1.0" , "invalid version" ], ["1.0" ]),
982+ ("" , None , False , ["1.0" , "invalid version" ], ["1.0" ]),
983+ ("" , False , None , ["1.0" , "invalid version" ], ["1.0" ]),
963984 ],
964985 )
965986 def test_specifier_filter (
@@ -1332,6 +1353,16 @@ def test_contains_exclusionary_bridges(
13321353 kwargs = {"prereleases" : prereleases } if prereleases is not None else {}
13331354 assert spec .contains (version , ** kwargs ) == expected
13341355
1356+ @pytest .mark .parametrize (
1357+ ("specifier" , "input" ),
1358+ [
1359+ (">=1.0" , "not a valid version" ),
1360+ ],
1361+ )
1362+ def test_contains_rejects_invalid_specifier (self , specifier , input ):
1363+ spec = SpecifierSet (specifier , prereleases = True )
1364+ assert not spec .contains (input )
1365+
13351366 @pytest .mark .parametrize (
13361367 ("specifier" , "expected" ),
13371368 [
0 commit comments