From 2ccea1785603ad35a05f75f40e9dc7fc82caa346 Mon Sep 17 00:00:00 2001 From: Armin Rigo Date: Mon, 20 Dec 2004 12:25:57 +0000 Subject: Any call to marshal.dumps() with the new optional argument 'version' just immediately segfaults, due to a typo! This was obviously never tested... Added a test for it, and also fixed the documentation. --- Doc/lib/libmarshal.tex | 6 +++--- Lib/test/test_marshal.py | 5 +++++ Python/marshal.c | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Doc/lib/libmarshal.tex b/Doc/lib/libmarshal.tex index 53ca668..d3dd835 100644 --- a/Doc/lib/libmarshal.tex +++ b/Doc/lib/libmarshal.tex @@ -62,7 +62,7 @@ operating on strings. The module defines these functions: -\begin{funcdesc}{dump}{value, file} +\begin{funcdesc}{dump}{value, file\optional{, version}} Write the value on the open file. The value must be a supported type. The file must be an open file object such as \code{sys.stdout} or returned by \function{open()} or @@ -75,7 +75,7 @@ The module defines these functions: read back by \function{load()}. \versionadded[The \var{version} argument indicates the data - format that \code{dumps} should use.]{2.4} + format that \code{dump} should use (see below)]{2.4} \end{funcdesc} \begin{funcdesc}{load}{file} @@ -96,7 +96,7 @@ The module defines these functions: contains an object that has) an unsupported type. \versionadded[The \var{version} argument indicates the data - format that \code{dumps} should use.]{2.4} + format that \code{dumps} should use (see below)]{2.4} \end{funcdesc} \begin{funcdesc}{loads}{string} diff --git a/Lib/test/test_marshal.py b/Lib/test/test_marshal.py index eb07521..5c1a3f3 100644 --- a/Lib/test/test_marshal.py +++ b/Lib/test/test_marshal.py @@ -180,6 +180,11 @@ class BugsTestCase(unittest.TestCase): self.assertRaises(Exception, marshal.loads, 'f') self.assertRaises(Exception, marshal.loads, marshal.dumps(5L)[:-1]) + def test_version_argument(self): + # Python 2.4.0 crashes for any call to marshal.dumps(x, y) + self.assertEquals(marshal.loads(marshal.dumps(5, 0)), 5) + self.assertEquals(marshal.loads(marshal.dumps(5, 1)), 5) + def test_main(): test_support.run_unittest(IntTestCase, FloatTestCase, diff --git a/Python/marshal.c b/Python/marshal.c index 590e1ca..0ab0597 100644 --- a/Python/marshal.c +++ b/Python/marshal.c @@ -893,7 +893,7 @@ marshal_dumps(PyObject *self, PyObject *args) { PyObject *x; int version = Py_MARSHAL_VERSION; - if (!PyArg_ParseTuple(args, "O|i:dumps", &x, version)) + if (!PyArg_ParseTuple(args, "O|i:dumps", &x, &version)) return NULL; return PyMarshal_WriteObjectToString(x, version); } -- cgit v0.12