-What's New in Python 2.2c1?
+What's New in Python 2.2c1
XXX Release date: ??-Dec-2001 XXX
===========================
C API
+- PyArg_ParseTupleAndKeywords() requires that the number of entries in
+ the keyword list equals the number of argument specifiers. This
+ wasn't checked correctly, and PyArg_ParseTupleAndKeywords could even
+ dump core in some bad cases. This has been repaired. As a result,
+ PyArg_ParseTupleAndKeywords may raise RuntimeError in bad cases that
+ previously went unchallenged.
+
New platforms
Tests
/* Search the format:
message <- error msg, if any (else NULL).
- name <- routine name, if any (else NULL).
+ fname <- routine name, if any (else NULL).
min <- # of required arguments, or -1 if all are required.
max <- most arguments (required + optional).
Check that kwlist has a non-NULL entry for each arg.
if (isalpha(i) && i != 'e') {
max++;
if (*p == NULL) {
- /* kwlist is too short */
- PyErr_BadInternalCall();
+ PyErr_SetString(PyExc_RuntimeError,
+ "more argument specifiers than "
+ "keyword list entries");
return 0;
}
p++;
break;
}
else if (i == '(') {
- PyErr_SetString(PyExc_SystemError,
- "tuple found in format when using keyword arguments");
+ PyErr_SetString(PyExc_RuntimeError,
+ "tuple found in format when using keyword "
+ "arguments");
return 0;
}
}
format = formatsave;
if (*p != NULL) {
- /* kwlist is too long */
- PyErr_BadInternalCall();
+ PyErr_SetString(PyExc_RuntimeError,
+ "more keyword list entries than "
+ "argument specifiers");
return 0;
}
if (min < 0) {