Commit 0a0a1a84 authored by R. David Murray's avatar R. David Murray

Issue #1680159: unicode coercion during an 'in' operation was masking

any errors that might occur during coercion of the left operand and
turning them into a TypeError with a message text that was confusing in
the given context.  This patch lets any errors through, as was already
done during coercion of the right hand side.
parent 96228739
...@@ -344,7 +344,8 @@ class UnicodeTest( ...@@ -344,7 +344,8 @@ class UnicodeTest(
# If the following fails either # If the following fails either
# the contains operator does not propagate UnicodeErrors or # the contains operator does not propagate UnicodeErrors or
# someone has changed the default encoding # someone has changed the default encoding
self.assertRaises(UnicodeError, 'g\xe2teau'.__contains__, u'\xe2') self.assertRaises(UnicodeDecodeError, 'g\xe2teau'.__contains__, u'\xe2')
self.assertRaises(UnicodeDecodeError, u'g\xe2teau'.__contains__, '\xe2')
self.assertTrue(u'' in '') self.assertTrue(u'' in '')
self.assertTrue('' in u'') self.assertTrue('' in u'')
...@@ -375,6 +376,7 @@ class UnicodeTest( ...@@ -375,6 +376,7 @@ class UnicodeTest(
self.assertTrue(u'asdf' not in u'') self.assertTrue(u'asdf' not in u'')
self.assertRaises(TypeError, u"abc".__contains__) self.assertRaises(TypeError, u"abc".__contains__)
self.assertRaises(TypeError, u"abc".__contains__, object())
def test_formatting(self): def test_formatting(self):
string_tests.MixinStrUnicodeUserStringTest.test_formatting(self) string_tests.MixinStrUnicodeUserStringTest.test_formatting(self)
......
...@@ -12,6 +12,9 @@ What's New in Python 2.7 alpha 2? ...@@ -12,6 +12,9 @@ What's New in Python 2.7 alpha 2?
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #1680159: unicode coercion during an 'in' operation no longer masks
the underlying error when the coercion fails for the left hand operand.
- Issue #7491: Metaclass's __cmp__ method was ignored. - Issue #7491: Metaclass's __cmp__ method was ignored.
- Issue #7466: segmentation fault when the garbage collector is called - Issue #7466: segmentation fault when the garbage collector is called
......
...@@ -6502,8 +6502,6 @@ int PyUnicode_Contains(PyObject *container, ...@@ -6502,8 +6502,6 @@ int PyUnicode_Contains(PyObject *container,
/* Coerce the two arguments */ /* Coerce the two arguments */
sub = PyUnicode_FromObject(element); sub = PyUnicode_FromObject(element);
if (!sub) { if (!sub) {
PyErr_SetString(PyExc_TypeError,
"'in <string>' requires string as left operand");
return -1; return -1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment