Skip to content

Commit fd47664

Browse files
authored
Set error when too many numbers of argument in pygame.Color.from_colorspace (#3125)
1 parent c00b777 commit fd47664

File tree

2 files changed

+37
-99
lines changed

2 files changed

+37
-99
lines changed

src_c/color.c

Lines changed: 8 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,21 +1008,12 @@ _color_set_hsva(pgColorObject *color, PyObject *value, void *closure)
10081008

10091009
DEL_ATTR_NOT_SUPPORTED_CHECK("hsva", value);
10101010

1011-
if (!PySequence_Check(value) || PySequence_Size(value) < 3) {
1011+
if (!PySequence_Check(value) || PySequence_Size(value) < 3 ||
1012+
PySequence_Size(value) > 4) {
10121013
PyErr_SetString(PyExc_ValueError, "invalid HSVA value");
10131014
return -1;
10141015
}
10151016

1016-
if (PySequence_Size(value) > 4) {
1017-
if (PyErr_WarnEx(
1018-
PyExc_DeprecationWarning,
1019-
"Passing sequences of size larger than 4 is deprecated, doing "
1020-
"this will error in a future version",
1021-
1) == -1) {
1022-
return -1;
1023-
}
1024-
}
1025-
10261017
/* H */
10271018
item = PySequence_GetItem(value, 0);
10281019
if (!item || !_get_double(item, &(hsva[0])) || hsva[0] < 0 ||
@@ -1183,21 +1174,12 @@ _color_set_hsla(pgColorObject *color, PyObject *value, void *closure)
11831174

11841175
DEL_ATTR_NOT_SUPPORTED_CHECK("hsla", value);
11851176

1186-
if (!PySequence_Check(value) || PySequence_Size(value) < 3) {
1177+
if (!PySequence_Check(value) || PySequence_Size(value) < 3 ||
1178+
PySequence_Size(value) > 4) {
11871179
PyErr_SetString(PyExc_ValueError, "invalid HSLA value");
11881180
return -1;
11891181
}
11901182

1191-
if (PySequence_Size(value) > 4) {
1192-
if (PyErr_WarnEx(
1193-
PyExc_DeprecationWarning,
1194-
"Passing sequences of size larger than 4 is deprecated, doing "
1195-
"this will error in a future version",
1196-
1) == -1) {
1197-
return -1;
1198-
}
1199-
}
1200-
12011183
/* H */
12021184
item = PySequence_GetItem(value, 0);
12031185
if (!item || !_get_double(item, &(hsla[0])) || hsla[0] < 0 ||
@@ -1358,21 +1340,11 @@ _color_set_i1i2i3(pgColorObject *color, PyObject *value, void *closure)
13581340

13591341
DEL_ATTR_NOT_SUPPORTED_CHECK("i1i2i3", value);
13601342

1361-
if (!PySequence_Check(value) || PySequence_Size(value) < 3) {
1343+
if (!PySequence_Check(value) || PySequence_Size(value) != 3) {
13621344
PyErr_SetString(PyExc_ValueError, "invalid I1I2I3 value");
13631345
return -1;
13641346
}
13651347

1366-
if (PySequence_Size(value) > 3) {
1367-
if (PyErr_WarnEx(
1368-
PyExc_DeprecationWarning,
1369-
"Passing sequences of size larger than 3 is deprecated, doing "
1370-
"this will error in a future version",
1371-
1) == -1) {
1372-
return -1;
1373-
}
1374-
}
1375-
13761348
/* I1 */
13771349
item = PySequence_GetItem(value, 0);
13781350
if (!item || !_get_double(item, &(i1i2i3[0])) || i1i2i3[0] < 0 ||
@@ -1440,21 +1412,11 @@ _color_set_cmy(pgColorObject *color, PyObject *value, void *closure)
14401412

14411413
DEL_ATTR_NOT_SUPPORTED_CHECK("cmy", value);
14421414

1443-
if (!PySequence_Check(value) || PySequence_Size(value) < 3) {
1415+
if (!PySequence_Check(value) || PySequence_Size(value) != 3) {
14441416
PyErr_SetString(PyExc_ValueError, "invalid CMY value");
14451417
return -1;
14461418
}
14471419

1448-
if (PySequence_Size(value) > 3) {
1449-
if (PyErr_WarnEx(
1450-
PyExc_DeprecationWarning,
1451-
"Passing sequences of size larger than 3 is deprecated, doing "
1452-
"this will error in a future version",
1453-
1) == -1) {
1454-
return -1;
1455-
}
1456-
}
1457-
14581420
/* I1 */
14591421
item = PySequence_GetItem(value, 0);
14601422
if (!item || !_get_double(item, &(cmy[0])) || cmy[0] < 0 || cmy[0] > 1) {
@@ -1510,21 +1472,12 @@ _color_set_normalized(pgColorObject *color, PyObject *value, void *closure)
15101472

15111473
DEL_ATTR_NOT_SUPPORTED_CHECK("normalized", value);
15121474

1513-
if (!PySequence_Check(value) || PySequence_Size(value) < 3) {
1475+
if (!PySequence_Check(value) || PySequence_Size(value) < 3 ||
1476+
PySequence_Size(value) > 4) {
15141477
PyErr_SetString(PyExc_ValueError, "invalid normalized value");
15151478
return -1;
15161479
}
15171480

1518-
if (PySequence_Size(value) > 4) {
1519-
if (PyErr_WarnEx(
1520-
PyExc_DeprecationWarning,
1521-
"Passing sequences of size larger than 4 is deprecated, doing "
1522-
"this will error in a future version",
1523-
1) == -1) {
1524-
return -1;
1525-
}
1526-
}
1527-
15281481
item = PySequence_GetItem(value, 0);
15291482
if (!item || !_get_double(item, &(frgba[0])) || frgba[0] < 0.0 ||
15301483
frgba[0] > 1.0) {

test/color_test.py

Lines changed: 29 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -782,13 +782,12 @@ def test_from_cmy(self):
782782
self.assertEqual(expected_cmy, cmy)
783783
self.assertEqual(expected_cmy, cmy_tuple)
784784

785-
with self.assertWarns(DeprecationWarning):
786-
self.assertEqual(
787-
expected_cmy, pygame.Color.from_cmy(0.5, 0.5, 0.5, "lel", "foo")
788-
)
789-
790-
with self.assertWarns(DeprecationWarning):
791-
self.assertEqual(expected_cmy, pygame.Color.from_cmy((0.5, 0.5, 0.5, 0.5)))
785+
self.assertRaises(
786+
ValueError, lambda: pygame.Color.from_cmy(0.5, 0.5, 0.5, "lel", "foo")
787+
)
788+
self.assertRaises(
789+
ValueError, lambda: pygame.Color.from_cmy((0.5, 0.5, 0.5, 0.5))
790+
)
792791

793792
def test_from_hsva(self):
794793
hsva = pygame.Color.from_hsva(0, 100, 100, 100)
@@ -799,15 +798,12 @@ def test_from_hsva(self):
799798
self.assertEqual(expected_hsva, hsva)
800799
self.assertEqual(expected_hsva, hsva_tuple)
801800

802-
with self.assertWarns(DeprecationWarning):
803-
self.assertEqual(
804-
expected_hsva, pygame.Color.from_hsva(0, 100, 100, 100, "lel", "foo")
805-
)
806-
807-
with self.assertWarns(DeprecationWarning):
808-
self.assertEqual(
809-
expected_hsva, pygame.Color.from_hsva((0, 100, 100, 100, "lel"))
810-
)
801+
self.assertRaises(
802+
ValueError, lambda: pygame.Color.from_hsva(0, 100, 100, 100, "lel", "foo")
803+
)
804+
self.assertRaises(
805+
ValueError, lambda: pygame.Color.from_hsva((0, 100, 100, 100, "lel"))
806+
)
811807

812808
def test_from_hsla(self):
813809
hsla = pygame.Color.from_hsla(0, 100, 100, 100)
@@ -818,15 +814,12 @@ def test_from_hsla(self):
818814
self.assertEqual(expected_hsla, hsla)
819815
self.assertEqual(expected_hsla, hsla_tuple)
820816

821-
with self.assertWarns(DeprecationWarning):
822-
self.assertEqual(
823-
expected_hsla, pygame.Color.from_hsla(0, 100, 100, 100, "lel")
824-
)
825-
826-
with self.assertWarns(DeprecationWarning):
827-
self.assertEqual(
828-
expected_hsla, pygame.Color.from_hsla((0, 100, 100, 100, "lel", "foo"))
829-
)
817+
self.assertRaises(
818+
ValueError, lambda: pygame.Color.from_hsla(0, 100, 100, 100, "lel")
819+
)
820+
self.assertRaises(
821+
ValueError, lambda: pygame.Color.from_hsla((0, 100, 100, 100, "lel", "foo"))
822+
)
830823

831824
def test_from_i1i2i3(self):
832825
i1i2i3 = pygame.Color.from_i1i2i3(0, 0, 0)
@@ -837,13 +830,10 @@ def test_from_i1i2i3(self):
837830
self.assertEqual(expected_i1i2i3, i1i2i3)
838831
self.assertEqual(expected_i1i2i3, i1i2i3_tuple)
839832

840-
with self.assertWarns(DeprecationWarning):
841-
self.assertEqual(
842-
expected_i1i2i3, pygame.Color.from_i1i2i3(0, 0, 0, "lel", "foo")
843-
)
844-
845-
with self.assertWarns(DeprecationWarning):
846-
self.assertEqual(expected_i1i2i3, pygame.Color.from_i1i2i3((0, 0, 0, 0)))
833+
self.assertRaises(
834+
ValueError, lambda: pygame.Color.from_i1i2i3(0, 0, 0, "lel", "foo")
835+
)
836+
self.assertRaises(ValueError, lambda: pygame.Color.from_i1i2i3((0, 0, 0, 0)))
847837

848838
def test_from_normalized(self):
849839
normal = pygame.Color.from_normalized(1, 1, 1, 1)
@@ -854,16 +844,9 @@ def test_from_normalized(self):
854844
self.assertEqual(expected_normal, normal)
855845
self.assertEqual(expected_normal, normal_tuple)
856846

857-
with self.assertWarns(DeprecationWarning):
858-
self.assertEqual(
859-
expected_normal, pygame.Color.from_normalized(1, 1, 1, 1, "lel")
860-
)
861-
862-
with self.assertWarns(DeprecationWarning):
863-
self.assertEqual(
864-
expected_normal,
865-
pygame.Color.from_normalized((1, 1, 1, 1, "lel", "foo")),
866-
)
847+
self.assertRaises(
848+
ValueError, lambda: pygame.Color.from_normalized(1, 1, 1, 1, "lel")
849+
)
867850

868851
def test_normalize(self):
869852
c = pygame.Color(204, 38, 194, 55)
@@ -1062,8 +1045,10 @@ def test_normalized__sanity_testing_converted_should_equate_bar_rounding(self):
10621045
def test_colorspaces_deprecated_large_sequence(self):
10631046
c = pygame.Color("black")
10641047
for space in ("hsla", "hsva", "i1i2i3", "cmy", "normalized"):
1065-
with self.assertWarns(DeprecationWarning):
1066-
setattr(c, space, (0, 0, 0, 0, "hehe 5th ignored member"))
1048+
with self.assertRaises(ValueError):
1049+
setattr(
1050+
c, space, (0, 0, 0, 0, "HAHAHAHAHAHA, don't ignore 5th member :)")
1051+
)
10671052

10681053
################################################################################
10691054

0 commit comments

Comments
 (0)