summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2002-12-12 20:03:19 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2002-12-12 20:03:19 (GMT)
commit00b6127097f10d7fb03ab5abcd213141b878a8fd (patch)
tree8bf715d0dc1d8c9c515629b90382bab2175374bf
parent63b4dd33c99bcad84fb928f874c133968d784632 (diff)
downloadcpython-00b6127097f10d7fb03ab5abcd213141b878a8fd.zip
cpython-00b6127097f10d7fb03ab5abcd213141b878a8fd.tar.gz
cpython-00b6127097f10d7fb03ab5abcd213141b878a8fd.tar.bz2
Patch #650653: Raise always value error if the table is not 256 bytes long.
-rw-r--r--Lib/test/string_tests.py2
-rw-r--r--Objects/stringobject.c12
2 files changed, 8 insertions, 6 deletions
diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py
index 3eb8785..b64917b 100644
--- a/Lib/test/string_tests.py
+++ b/Lib/test/string_tests.py
@@ -192,6 +192,8 @@ def run_method_tests(test):
table = string.maketrans('a', 'A')
test('translate', 'abc', 'Abc', table)
test('translate', 'xyz', 'xyz', table)
+ test('translate', 'xyz', ValueError, 'too short', 'strip')
+ test('translate', 'xyz', ValueError, 'too short')
test('replace', 'one!two!three!', 'one@two!three!', '!', '@', 1)
test('replace', 'one!two!three!', 'onetwothree', '!', '')
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 3a69aa9..7937b46 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -2070,6 +2070,12 @@ string_translate(PyStringObject *self, PyObject *args)
else if (PyObject_AsCharBuffer(tableobj, &table1, &tablen))
return NULL;
+ if (tablen != 256) {
+ PyErr_SetString(PyExc_ValueError,
+ "translation table must be 256 characters long");
+ return NULL;
+ }
+
if (delobj != NULL) {
if (PyString_Check(delobj)) {
del_table = PyString_AS_STRING(delobj);
@@ -2084,12 +2090,6 @@ string_translate(PyStringObject *self, PyObject *args)
#endif
else if (PyObject_AsCharBuffer(delobj, &del_table, &dellen))
return NULL;
-
- if (tablen != 256) {
- PyErr_SetString(PyExc_ValueError,
- "translation table must be 256 characters long");
- return NULL;
- }
}
else {
del_table = NULL;