Change formatchar(), so that u"%c" % 0xffffffff now raises
an OverflowError instead of a TypeError to be consistent
with "%c" % 256. See SF patch #710127.
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index 2f19c51..28837b4 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -360,7 +360,7 @@
         self.assertEqual(u"%(x)s, %(\xfc)s" % {'x':u"abc", u'\xfc':"def"}, u'abc, def')
 
         self.assertEqual(u'%c' % 0x1234, u'\u1234')
-        self.assertRaises(ValueError, u"%c".__mod__, (sys.maxunicode+1,))
+        self.assertRaises(OverflowError, u"%c".__mod__, (sys.maxunicode+1,))
 
         # formatting jobs delegated from the string implementation:
         self.assertEqual('...%(foo)s...' % {'foo':u"abc"}, u'...abc...')
diff --git a/Misc/NEWS b/Misc/NEWS
index fb829b9..673af1c 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -35,7 +35,8 @@
   interpreter executions, would fail.
 
 - "%c" % u"a" now returns a unicode string instead of raising a
-  TypeError. See SF patch #710127.
+  TypeError. u"%c" % 0xffffffff now raises a OverflowError instead
+  of a TypeError to be consistent with "%c" % 256. See SF patch #710127.
 
 Extension modules
 -----------------
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index dcfde34..b167a1d 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -6157,14 +6157,14 @@
 	    goto onError;
 #ifdef Py_UNICODE_WIDE
 	if (x < 0 || x > 0x10ffff) {
-	    PyErr_SetString(PyExc_ValueError,
+	    PyErr_SetString(PyExc_OverflowError,
 			    "%c arg not in range(0x110000) "
 			    "(wide Python build)");
 	    return -1;
 	}
 #else
 	if (x < 0 || x > 0xffff) {
-	    PyErr_SetString(PyExc_ValueError,
+	    PyErr_SetString(PyExc_OverflowError,
 			    "%c arg not in range(0x10000) "
 			    "(narrow Python build)");
 	    return -1;