|
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