Fix for SF bug [ 817156 ] invalid \U escape gives 0=length unistr.
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index 6e40b9f..18a2d46 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -33,6 +33,13 @@
             self.assertEqual(realresult, result)
             self.assert_(object is not realresult)
 
+    def test_literals(self):
+        self.assertEqual(u'\xff', u'\u00ff')
+        self.assertEqual(u'\uffff', u'\U0000ffff')
+        self.assertRaises(UnicodeError, eval, 'u\'\\Ufffffffe\'')
+        self.assertRaises(UnicodeError, eval, 'u\'\\Uffffffff\'')
+        self.assertRaises(UnicodeError, eval, 'u\'\\U%08x\'' % 0x110000)
+
     def test_repr(self):
         if not sys.platform.startswith('java'):
             # Test basic sanity of repr()
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 83104d8..f0480fb 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -1750,7 +1750,7 @@
                     chr += 10 + c - 'A';
             }
             s += i;
-            if (chr == 0xffffffff)
+            if (chr == 0xffffffff && PyErr_Occurred())
                 /* _decoding_error will have already written into the
                    target buffer. */
                 break;