diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2006-11-19 10:41:41 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2006-11-19 10:41:41 (GMT) |
commit | cffcc8b195d0086d6089ac4563ac17b4c95471e3 (patch) | |
tree | 0e082ae41d65af0c069a5df47c70354827ddb830 | |
parent | 283a1353a0834d53b230b22e8db9e7b4fcd220d0 (diff) | |
download | cpython-cffcc8b195d0086d6089ac4563ac17b4c95471e3.zip cpython-cffcc8b195d0086d6089ac4563ac17b4c95471e3.tar.gz cpython-cffcc8b195d0086d6089ac4563ac17b4c95471e3.tar.bz2 |
Make cStringIO.truncate raise IOError for negative
arguments (even for -1). Fixes the last bit of
#1359365.
-rw-r--r-- | Lib/test/test_StringIO.py | 1 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Modules/cStringIO.c | 12 |
3 files changed, 15 insertions, 1 deletions
diff --git a/Lib/test/test_StringIO.py b/Lib/test/test_StringIO.py index aa36b09..9f79b02 100644 --- a/Lib/test/test_StringIO.py +++ b/Lib/test/test_StringIO.py @@ -62,6 +62,7 @@ class TestGenericStringIO(unittest.TestCase): eq(f.getvalue(), 'abcde') f.write('xyz') eq(f.getvalue(), 'abcdexyz') + self.assertRaises(IOError, f.truncate, -1) f.close() self.assertRaises(ValueError, f.write, 'frobnitz') @@ -101,6 +101,9 @@ Core and builtins Library ------- +- cStringIO.truncate(-1) now raises an IOError, like StringIO and + regular files. + - Patch #1472877: Fix Tix subwidget name resolution. - Patch #1594554: Always close a tkSimpleDialog on ok(), even diff --git a/Modules/cStringIO.c b/Modules/cStringIO.c index 100891b..3f762b0 100644 --- a/Modules/cStringIO.c +++ b/Modules/cStringIO.c @@ -289,7 +289,17 @@ IO_truncate(IOobject *self, PyObject *args) { if (!IO__opencheck(self)) return NULL; if (!PyArg_ParseTuple(args, "|n:truncate", &pos)) return NULL; - if (pos < 0) pos = self->pos; + + if (PyTuple_Size(args) == 0) { + /* No argument passed, truncate to current position */ + pos = self->pos; + } + + if (pos < 0) { + errno = EINVAL; + PyErr_SetFromErrno(PyExc_IOError); + return NULL; + } if (self->string_size > pos) self->string_size = pos; self->pos = self->string_size; |