summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorMark Dickinson <dickinsm@gmail.com>2009-12-03 11:01:53 (GMT)
committerMark Dickinson <dickinsm@gmail.com>2009-12-03 11:01:53 (GMT)
commitd0ed0db574acef68cb24bb92a2b315474c86386b (patch)
treeb520b43792f3505704df91560018ca7f19f51a7e /Modules
parenta9566d02a26a0e9a4b6ed76937c46da49a012bf1 (diff)
downloadcpython-d0ed0db574acef68cb24bb92a2b315474c86386b.zip
cpython-d0ed0db574acef68cb24bb92a2b315474c86386b.tar.gz
cpython-d0ed0db574acef68cb24bb92a2b315474c86386b.tar.bz2
Merged revisions 76646 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r76646 | mark.dickinson | 2009-12-03 10:59:46 +0000 (Thu, 03 Dec 2009) | 6 lines Issue #7414: Add missing 'case 'C'' to skipitem() in getargs.c. This was causing PyArg_ParseTupleAndKeywords(args, kwargs, "|CC", ...) to fail with a RuntimeError. Thanks Case Van Horsen for tracking down the source of this error. ........
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_testcapimodule.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
index 5532e07..5917d91 100644
--- a/Modules/_testcapimodule.c
+++ b/Modules/_testcapimodule.c
@@ -616,6 +616,52 @@ test_s_code(PyObject *self)
Py_RETURN_NONE;
}
+static PyObject *
+test_bug_7414(PyObject *self)
+{
+ /* Issue #7414: for PyArg_ParseTupleAndKeywords, 'C' code wasn't being
+ skipped properly in skipitem() */
+ int a = 0, b = 0, result;
+ char *kwlist[] = {"a", "b", NULL};
+ PyObject *tuple = NULL, *dict = NULL, *b_str;
+
+ tuple = PyTuple_New(0);
+ if (tuple == NULL)
+ goto failure;
+ dict = PyDict_New();
+ if (dict == NULL)
+ goto failure;
+ b_str = PyUnicode_FromString("b");
+ if (b_str == NULL)
+ goto failure;
+ result = PyDict_SetItemString(dict, "b", b_str);
+ Py_DECREF(b_str);
+ if (result < 0)
+ goto failure;
+
+ result = PyArg_ParseTupleAndKeywords(tuple, dict, "|CC",
+ kwlist, &a, &b);
+ if (!result)
+ goto failure;
+
+ if (a != 0)
+ return raiseTestError("test_bug_7414",
+ "C format code not skipped properly");
+ if (b != 'b')
+ return raiseTestError("test_bug_7414",
+ "C format code returned wrong value");
+
+ Py_DECREF(dict);
+ Py_DECREF(tuple);
+ Py_RETURN_NONE;
+
+ failure:
+ Py_XDECREF(dict);
+ Py_XDECREF(tuple);
+ return NULL;
+}
+
+
static volatile int x;
/* Test the u and u# codes for PyArg_ParseTuple. May leak memory in case
@@ -1457,6 +1503,7 @@ static PyMethodDef TestMethods[] = {
{"test_long_numbits", (PyCFunction)test_long_numbits, METH_NOARGS},
{"test_k_code", (PyCFunction)test_k_code, METH_NOARGS},
{"test_empty_argparse", (PyCFunction)test_empty_argparse,METH_NOARGS},
+ {"test_bug_7414", (PyCFunction)test_bug_7414, METH_NOARGS},
{"test_null_strings", (PyCFunction)test_null_strings, METH_NOARGS},
{"test_string_from_format", (PyCFunction)test_string_from_format, METH_NOARGS},
{"test_with_docstring", (PyCFunction)test_with_docstring, METH_NOARGS,