|
8 | 8 |
|
9 | 9 |
|
10 | 10 | NULL = None |
| 11 | +INVALID_UTF8 = b'\xff' |
11 | 12 |
|
12 | 13 | class DictSubclass(dict): |
13 | 14 | def __getitem__(self, key): |
@@ -137,7 +138,7 @@ def test_dict_getitemstring(self): |
137 | 138 | self.assertEqual(getitemstring(dct2, b'a'), 1) |
138 | 139 | self.assertIs(getitemstring(dct2, b'b'), KeyError) |
139 | 140 |
|
140 | | - self.assertIs(getitemstring({}, b'\xff'), KeyError) |
| 141 | + self.assertIs(getitemstring({}, INVALID_UTF8), KeyError) |
141 | 142 | self.assertIs(getitemstring(42, b'a'), KeyError) |
142 | 143 | self.assertIs(getitemstring([], b'a'), KeyError) |
143 | 144 | # CRASHES getitemstring({}, NULL) |
@@ -173,7 +174,7 @@ def test_dict_getitemstringref(self): |
173 | 174 | self.assertIs(getitemstring(dct2, b'b'), KeyError) |
174 | 175 |
|
175 | 176 | self.assertRaises(SystemError, getitemstring, 42, b'a') |
176 | | - self.assertRaises(UnicodeDecodeError, getitemstring, {}, b'\xff') |
| 177 | + self.assertRaises(UnicodeDecodeError, getitemstring, {}, INVALID_UTF8) |
177 | 178 | self.assertRaises(SystemError, getitemstring, [], b'a') |
178 | 179 | # CRASHES getitemstring({}, NULL) |
179 | 180 | # CRASHES getitemstring(NULL, b'a') |
@@ -213,6 +214,21 @@ def test_dict_contains(self): |
213 | 214 | # CRASHES contains(42, 'a') |
214 | 215 | # CRASHES contains(NULL, 'a') |
215 | 216 |
|
| 217 | + def test_dict_contains_string(self): |
| 218 | + contains_string = _testcapi.dict_containsstring |
| 219 | + dct = {'a': 1, '\U0001f40d': 2} |
| 220 | + self.assertTrue(contains_string(dct, b'a')) |
| 221 | + self.assertFalse(contains_string(dct, b'b')) |
| 222 | + self.assertTrue(contains_string(dct, '\U0001f40d'.encode())) |
| 223 | + self.assertRaises(UnicodeDecodeError, contains_string, dct, INVALID_UTF8) |
| 224 | + |
| 225 | + dct2 = DictSubclass(dct) |
| 226 | + self.assertTrue(contains_string(dct2, b'a')) |
| 227 | + self.assertFalse(contains_string(dct2, b'b')) |
| 228 | + |
| 229 | + # CRASHES contains({}, NULL) |
| 230 | + # CRASHES contains(NULL, b'a') |
| 231 | + |
216 | 232 | def test_dict_setitem(self): |
217 | 233 | setitem = _testcapi.dict_setitem |
218 | 234 | dct = {} |
@@ -245,7 +261,7 @@ def test_dict_setitemstring(self): |
245 | 261 | setitemstring(dct2, b'a', 5) |
246 | 262 | self.assertEqual(dct2, {'a': 5}) |
247 | 263 |
|
248 | | - self.assertRaises(UnicodeDecodeError, setitemstring, {}, b'\xff', 5) |
| 264 | + self.assertRaises(UnicodeDecodeError, setitemstring, {}, INVALID_UTF8, 5) |
249 | 265 | self.assertRaises(SystemError, setitemstring, UserDict(), b'a', 5) |
250 | 266 | self.assertRaises(SystemError, setitemstring, 42, b'a', 5) |
251 | 267 | # CRASHES setitemstring({}, NULL, 5) |
@@ -287,7 +303,7 @@ def test_dict_delitemstring(self): |
287 | 303 | self.assertEqual(dct2, {'c': 2}) |
288 | 304 | self.assertRaises(KeyError, delitemstring, dct2, b'b') |
289 | 305 |
|
290 | | - self.assertRaises(UnicodeDecodeError, delitemstring, {}, b'\xff') |
| 306 | + self.assertRaises(UnicodeDecodeError, delitemstring, {}, INVALID_UTF8) |
291 | 307 | self.assertRaises(SystemError, delitemstring, UserDict({'a': 1}), b'a') |
292 | 308 | self.assertRaises(SystemError, delitemstring, 42, b'a') |
293 | 309 | # CRASHES delitemstring({}, NULL) |
|
0 commit comments