]> granicus.if.org Git - python/commitdiff
fix escape_encode to return the correct consumed size
authorPhilip Jenvey <pjenvey@underboss.org>
Mon, 5 Apr 2010 02:51:51 +0000 (02:51 +0000)
committerPhilip Jenvey <pjenvey@underboss.org>
Mon, 5 Apr 2010 02:51:51 +0000 (02:51 +0000)
Lib/test/test_codecs.py
Modules/_codecsmodule.c

index 8caf0182590e162bd1d7d04cd28400515ad9e27b..f8563f61ae65d4a99573384a35ee07a9f24b8ed4 100644 (file)
@@ -835,6 +835,9 @@ class UnicodeInternalTest(unittest.TestCase):
         self.assertEquals(encoder(u"a")[1], 1)
         self.assertEquals(encoder(u"\xe9\u0142")[1], 2)
 
+        encoder = codecs.getencoder("string-escape")
+        self.assertEquals(encoder(r'\x00')[1], 4)
+
 # From http://www.gnu.org/software/libidn/draft-josefsson-idn-test-vectors.html
 nameprep_tests = [
     # 3.1 Map to nothing.
index 495e4ff53a46a8ea4ed9730fe3b085831c59305d..c0c8857866480c5f8c4e2d2f8ed9d40b765701e5 100644 (file)
@@ -179,12 +179,13 @@ escape_encode(PyObject *self,
        PyObject *str;
        const char *errors = NULL;
        char *buf;
-       Py_ssize_t len;
+       Py_ssize_t consumed, len;
 
-       if (!PyArg_ParseTuple(args, "O!|z:escape_encode",
-                             &PyString_Type, &str, &errors))
+       if (!PyArg_ParseTuple(args, "S|z:escape_encode",
+                             &str, &errors))
                return NULL;
 
+       consumed = PyString_GET_SIZE(str);
        str = PyString_Repr(str, 0);
        if (!str)
                return NULL;
@@ -196,7 +197,7 @@ escape_encode(PyObject *self,
        if (_PyString_Resize(&str, len-2) < 0)
                return NULL;
        
-       return codec_tuple(str, PyString_Size(str));
+       return codec_tuple(str, consumed);
 }
 
 #ifdef Py_USING_UNICODE