summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Jenvey <pjenvey@underboss.org>2010-04-05 02:51:51 +0000
committerPhilip Jenvey <pjenvey@underboss.org>2010-04-05 02:51:51 +0000
commite7e45c8cee52bb03b3b283570a91c499b33c8d62 (patch)
tree446aa9aa23fa92b74b71f034ad309edeac22e71e
parent1197cddd29e630b0a4a9a3bce3c5cbe8f150702c (diff)
downloadcpython-e7e45c8cee52bb03b3b283570a91c499b33c8d62.tar.gz
fix escape_encode to return the correct consumed size
-rw-r--r--Lib/test/test_codecs.py3
-rw-r--r--Modules/_codecsmodule.c9
2 files changed, 8 insertions, 4 deletions
diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py
index 8caf018259..f8563f61ae 100644
--- a/Lib/test/test_codecs.py
+++ b/Lib/test/test_codecs.py
@@ -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.
diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c
index 495e4ff53a..c0c8857866 100644
--- a/Modules/_codecsmodule.c
+++ b/Modules/_codecsmodule.c
@@ -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