Merged revisions 56782-56847 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/p3yk

................
  r56808 | kurt.kaiser | 2007-08-07 14:15:45 -0700 (Tue, 07 Aug 2007) | 2 lines

  Replace sys.exitfunc call with atexit call
................
  r56835 | thomas.wouters | 2007-08-08 09:20:30 -0700 (Wed, 08 Aug 2007) | 8 lines


  Tests for dict comprehensions I forgot to 'svn add' when committing the
  actual feature.

  I was _sure_ I had checked in these new tests already, but I guess the
  checkin failed and I didn't notice.
................
  r56847 | guido.van.rossum | 2007-08-09 07:03:34 -0700 (Thu, 09 Aug 2007) | 30 lines

  Merged revisions 56760-56846 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk

  ........
    r56762 | georg.brandl | 2007-08-06 00:37:58 -0700 (Mon, 06 Aug 2007) | 2 lines

    Place #ifdef Py_USING_UNICODE around decode_unicode().
  ........
    r56763 | georg.brandl | 2007-08-06 00:39:09 -0700 (Mon, 06 Aug 2007) | 2 lines

    Replace unnecessary function call.
  ........
    r56764 | georg.brandl | 2007-08-06 00:52:20 -0700 (Mon, 06 Aug 2007) | 2 lines

    Patch #1765839: add link to https+proxy urllib2 opener.
  ........
    r56797 | georg.brandl | 2007-08-07 00:13:24 -0700 (Tue, 07 Aug 2007) | 2 lines

    Bug #1769002: fix a now-wrong sentence in the tutorial.
  ........
    r56830 | georg.brandl | 2007-08-08 06:03:41 -0700 (Wed, 08 Aug 2007) | 3 lines

    Revert the fix for #1548891, it broke backwards compatibility with arbitrary read buffers.
    Fixes #1730114.
  ........
    r56833 | georg.brandl | 2007-08-08 06:50:02 -0700 (Wed, 08 Aug 2007) | 2 lines

    Fix compilation warning.
  ........
................
diff --git a/Modules/cStringIO.c b/Modules/cStringIO.c
index 16d4173..9b39703 100644
--- a/Modules/cStringIO.c
+++ b/Modules/cStringIO.c
@@ -664,8 +664,11 @@
   char *buf;
   Py_ssize_t size;
 
-  if (PyObject_AsCharBuffer(s, (const char **)&buf, &size) != 0)
-      return NULL;
+  if (PyObject_AsReadBuffer(s, (const void **)&buf, &size)) {
+    PyErr_Format(PyExc_TypeError, "expected read buffer, %.200s found",
+                 s->ob_type->tp_name);
+    return NULL;
+  }
 
   self = PyObject_New(Iobject, &Itype);
   if (!self) return NULL;